Najpierw zauważ, że kiedy mówisz "dzisiaj", odpowiedź może być różna dla różnych osób w różnych częściach świata. Dlatego, aby uzyskać aktualną datę lokalną, musisz mieć na uwadze strefę czasową.
Noda Czas prawidłowo modeluje to, podając Instant
po wywołaniu Now
z implementacji , takiej jak zegar systemowy. Chwila jest uniwersalna, więc wystarczy ją przekonwertować na strefę czasową, aby uzyskać lokalną datę strefy czasowej.
// get the current time from the system clock
Instant now = SystemClock.Instance.Now;
// get a time zone
DateTimeZone tz = DateTimeZoneProviders.Tzdb["Asia/Tokyo"];
// use now and tz to get "today"
LocalDate today = now.InZone(tz).Date;
To jest minimalny kod. Oczywiście, jeśli chcesz korzystać z lokalnej strefy czasowej komputera (jak to zrobiłeś z DateTime.Now
), można uzyskać go tak:
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
I rzeczywiście wdrożyć go prawidłowo, należy zadzwonić .Now
z interfejsu IClock
, dzięki czemu można zastąpić zegar systemowy fałszywym zegarem dla testów jednostkowych.
Jest to doskonały przykład tego, jak Noda Time celowo nie ukrywa przed tobą rzeczy. Wszystko to dzieje się nadal pod maską, kiedy dzwonisz pod numer DateTime.Now
, ale po prostu go nie widzisz. You can read more about Noda Time's design philosophy in the user guide.
Podoba mi się. 2.0 cały czas wygląda lepiej! –