Trước tiên, hãy nhận ra rằng khi bạn nói "hôm nay", câu trả lời có thể khác với những người khác nhau ở các nơi khác nhau trên thế giới. Do đó, để có được ngày địa phương hiện tại, bạn phải ghi nhớ múi giờ.
Thời gian Noda mô hình hóa chính xác điều này bằng cách cung cấp cho bạn Instant
khi bạn gọi Now
từ triển khai IClock
chẳng hạn như đồng hồ hệ thống. Ngay lập tức là phổ biến, vì vậy bạn chỉ cần chuyển đổi nó thành một số múi giờ để nhận được ngày địa phương của múi giờ đó.
// 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;
Đó là mã tối thiểu. Tất nhiên, nếu bạn muốn sử dụng múi giờ địa phương của máy tính (như bạn đã làm với DateTime.Now
), bạn có thể nhận được nó như vậy:
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
Và để thực sự thực hiện nó đúng cách, bạn nên gọi .Now
từ giao diện IClock
, như vậy bạn có thể thay thế đồng hồ hệ thống bằng đồng hồ giả cho các bài kiểm tra đơn vị của mình.
Đây là ví dụ tuyệt vời về cách Noda Time cố ý không che giấu mọi thứ với bạn. Tất cả điều này vẫn đang diễn ra dưới mui xe khi bạn gọi DateTime.Now
, nhưng bạn chỉ không nhìn thấy nó. You can read more about Noda Time's design philosophy in the user guide.
Nguồn
2015-01-09 04:30:22
Tôi thích nó. 2.0 là tìm kiếm tốt hơn tất cả các thời gian! –