Wiele odpowiedzi tutaj wskazuje na przechowywanie jako UTC. Ale bądź z tym bardzo ostrożny. Na przykład, jeśli umówisz się na spotkanie o godzinie 12:00, ale spotkanie odbędzie się po zmianie na czas letni, co się stanie? UTC nie przechowuje żadnych informacji o tym, czy dst było aktywne, gdy spotkanie było przechowywane. Wiele dużych, znanych systemów popełniło ten błąd, gdy użytkownik wysyła wiadomość e-mail o 9 rano latem, a następnie zimą wysłany czas pokazuje 8 rano, ponieważ obliczenia z UTC zależą od tego, kiedy spojrzysz na godzinę, nie jest włączony, kiedy data / godzina została zarejestrowana.
Znacznie lepiej jest założyć, że użytkownik chce mieć zawsze wybrane czasy. Bez konwersji UTC, bez konwersji czasu, bez informacji o strefie czasowej, nic. Umówienie się na spotkanie od 08:00 do 12:00 w dniu 21 marca 2016 r. Jest właśnie takie. Nie używaj czasu lokalnego ani czasu UTC, ale czas nieokreślony (w jsonie nie ma ani Z ani +, w zasadzie w .NET ma DateTime.Kind = DateTimeKind.Unspecified).
Oczywiście, jeśli twoim przypadkiem użycia jest to, że jesteś firmą, która odbywa spotkania z kimś z różnych stref czasowych i chcesz zobaczyć te informacje, powiedzmy, w kalendarzu firmowym, ale pozwolić użytkownikom zobaczyć, która godzina jest w ich strefie czasowej, staje się bardziej skomplikowane. Czas musi być odpowiedni dla różnych osób w różnych strefach czasowych (dostawca i klient).
W takich przypadkach możesz nawet chcieć zapisać, kiedy spotkanie zostało zapisane w bazie danych, w której strefie czasowej i jeśli zawierało to dst, czy nie. W ten sposób zawsze możesz obliczyć czas lokalny na cokolwiek innego, czy to będzie teraz, czy to, co miało być historycznie. Ponieważ strefy czasowe są bardzo niestatyczne, co jeszcze bardziej komplikuje sytuację.
Na szczęście w tym miejscu przychodzą biblioteki takie jak http://nodatime.org/ i są wysoce zalecane. Działają z datami znacznie bardziej konsekwentnie. Nawet wtedy zaleciłbym zawinięcie wszystkich zmiennych i logiki datetime w swoje własne opakowania, używając interfejsów, aby można było ich wyśmiewać, a następnie można zmienić logikę później.