一個野田時間的原則設計決策的獲取日期值,是應該有沒有計算機本地時區設置產生的副作用。在內部,GetLastWriteTime
調用GetLastWriteTimeUtc().ToLocalTime()
。所以只要撥打GetLastWriteTime
,你就違反了這個理想。
正確的Noda時間類型讀取文件時間將是Instant
。
Instant instant = Instant.FromDateTimeUtc(File.GetLastWriteTimeUtc(file));
從那裏,如果你想要一個本地日期和/或時間,那麼你可以申請一個時區。
首先,決定你想要什麼時區。例如:
DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/New_York"];
如果你想出於某種原因使用電腦本身的本地時區,然後使用此:
DateTimeZone zone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
的時區然後應用到你的文件時的瞬間:
ZonedDateTime zonedDateTime = instant.InZone(zone);
然後你就可以從任一挑,取決於正是你要找的:
LocalDateTime localDateTime = zonedDateTime.LocalDateTime;
LocalDate date = zonedDateTime.Date;
LocalTime time = zonedDateTime.TimeOfDay;
此外,您應該瞭解,在磁盤上,文件時間取決於您正在使用的文件系統的類型。
如果您使用的是NTFS,則磁盤上的時間以UTC記錄。這是非常需要的。
如果您使用exFAT,磁盤上的時間記錄在本地日期+時間,但它也包括UTC的偏移量,所以它可以輕鬆地轉換回UTC,而不會出現歧義。
如果您使用的是FAT或FAT32文件系統,則使用當地時間記錄當前文件寫入時的時區。
這會產生不明確的數據,因爲在daylight saving time回退轉換期間您可能正在寫入文件,或者您可能正在使用不同的時區設置或完全不同的計算機讀取數據。
這是格式化可用作exFAT而不是FAT32的任何USB thumbdrive或SD卡的很好的理由。
您是指LocalTime或LocalDate?你在你的問題中指定。有'LocalDateTime.FromDateTime()'存在,這可以幫助你嗎? –
你說它無法獲得價值。但是什麼是例外? – mason