我有一个需要转换为DateTime的NodaTime LocalDate。这能办到吗?
我有这个:
DateTime modifiedDate = File.GetLastWriteTime(file);我想要这个:
LocalTime modifiedDate = File.GetLastWriteTime(file);但是NodaTime API似乎无法从GetLastWriteTime获得日期值。
因此,我要么需要( a)将DateTime转换为LocalTime,要么( b)以某种方式使用LocalTime从GetLastWriteTime获取日期值。
发布于 2014-04-18 16:14:04
Noda Time的主要设计决策之一是,计算机的局部时区设置不应产生副作用。在内部,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;另外,您应该了解,在磁盘上,文件时间取决于您正在使用的文件系统的类型。
https://stackoverflow.com/questions/23119358
复制相似问题