2013-07-09 15 views
8

wrócę listę dat UTC/razy z usługi .NET, sformatowany tak:moment.js, stref czasowych i letniego

"2013-07-09 19:48:07 +00:00". 

Na kliencie przekonwertować każdy z tych wartości ciąg znaków w odpowiadająca chwilę UTC oparte, tak jak

var fooUtc = new moment.utc(serverDateTimeString) 

na stronie znajduje się opadanie w dół zawierający listę stref czasowych, które użytkownik może zmieniać. Są one związane z kolekcją przedmiotów strefy czasowej tak:

{ 
    id: "Central Standard Time", 
    label: "(UTC-06:00) Central Time (US & Canada)", 
    observesDaylightSavings: true, 
    baseUtcOffset: { 
     asHours: -6, 
     asMinutes: -360, 
     asText: "-06:00" 
} 

I następnie wyświetlić każdą chwilę przechodzi w wybranej strefie czasowej offset, tak:

fooUtc.local().zone(selectedTimeZone.baseUtcOffset.asMinutes).format() 

Jednak wynik nie uwzględnia oszczędności w świetle dziennym, ponieważ dane strefy czasowej pochodzące z .Net nie rozróżniają między przesunięciami dst i non dst.

Czy jest jakiś sposób, aby to działało z plikiem moment.js lub nowymi bitami strefy czasowej? Myślę, że byłoby to możliwe, gdybym mógł odwzorować standardowe nazwy przesunięcia UTC (np. "Centralny czas standardowy") na dany identyfikator strefy czasowej Olson strefy czasowej (np. "Ameryka/Chicago"), ale jeśli jest łatwiejszy sposób, proszę daj mi znać.

+0

skończyło się tworząc plik odwzorowujący opartą na tym stanowisku [] [1] [1]: http://stackoverflow.com/questions/8372537/converting-olson-tzid-to- windows-time-zone –

Odpowiedz

5

Należy zbadać, używając Noda Time po stronie .Net i moment-timezone na kliencie, przekazując identyfikator strefy czasowej IANA/Olson.

Jeśli chcesz zachować identyfikatory strefy czasowej systemu Windows na liście rozwijanej, możesz wykonywać konwersje z danymi CLDR osadzonymi w czasie Noda. Udokumentowałem, jak to zrobić w tym poście: How to translate between Windows and IANA time zones?

Jednak lepszym rozwiązaniem byłoby uniknięcie wszystkich stref systemu Windows. Możesz wypełnić listę identyfikatorów IANA/Olson za pomocą techniki, którą opisuję w tym wpisie: How should I populate a list of IANA/Olson time zones from Noda Time?

Co więcej, możesz zastąpić listę rozwijaną za pomocą kontrolki (wbudowanej lub modalnej), która wyświetla mapę świata , aby Twoi użytkownicy mogli łatwo wybrać swoją strefę czasową. Najlepsza kontrola tego, co widziałem, to this one, ale jest tam także kilka innych.

Jeśli możesz zajmować się wyłącznie w strefach IANA/Olson, nie ma potrzeby dokonywania konwersji. Możesz zrezygnować z obiektu Windows TimeZoneInfo i po prostu użyć czasu Noda. Jeśli chcesz, możesz zastąpić tylko funkcje konwersji strefy czasowej i pozostawić resztę w stanie nienaruszonym. Możesz też całkowicie wymieniać i zastępować wszystkie swoje aplikacje DateTime i DateTimeOffset z typami czasu Noda. To zależy od Ciebie.

+0

byłoby fajnie, ale preferencje użytkownika są przechowywane w DB przy użyciu identyfikatora strefy czasowej, więc utknąłem z tym na razie. Dzięki za heads-up na Nodzie ... Zajrzę ... –

Powiązane problemy