Zuerst erkennen, dass, wenn Sie "heute" sagen, die Antwort für verschiedene Menschen in verschiedenen Teilen der Welt unterschiedlich sein könnte. Um das aktuelle lokale Datum zu erhalten, müssen Sie daher eine Zeitzone berücksichtigen.
Noda Zeit modelliert dies korrekt, indem Sie eine Instant
, wenn Sie Now
von einer IClock
Implementierung wie die Systemuhr aufrufen. Ein Instant ist universell, Sie müssen ihn also nur in eine bestimmte Zeitzone konvertieren, um das lokale Datum der Zeitzone zu erhalten.
// 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;
Das ist der minimale Code. Natürlich, wenn Sie den Computer des lokalen Zeitzone verwenden möchten (wie Sie mit DateTime.Now
tat), können Sie es wie so erhalten:
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
Und wirklich, es richtig zu implementieren, sollten Sie .Now
von der IClock
Schnittstelle aufrufen , so dass Sie die Systemuhr durch eine falsche Uhr für Ihre Komponententests ersetzen könnten.
Dies ist ein großartiges Beispiel dafür, wie Noda Time vorsätzlich nicht die Dinge vor dir verbirgt. All das passiert immer noch unter der Haube, wenn Sie DateTime.Now
anrufen, aber Sie sehen es einfach nicht. You can read more about Noda Time's design philosophy in the user guide.
Ich mag es. 2.0 sieht immer besser aus! –