use*_*310 5 c# datetime localtime nodatime
我有一个DateTime需要转换为NodaTime LocalDate.可以这样做吗?
我有这个:
DateTime modifiedDate = File.GetLastWriteTime(file);
Run Code Online (Sandbox Code Playgroud)
我想要这个:
LocalTime modifiedDate = File.GetLastWriteTime(file);
Run Code Online (Sandbox Code Playgroud)
但看起来 NodaTime API无法从中获取日期值GetLastWriteTime.
所以我要么a)将DateTime转换为LocalTime或b)以某种方式使用LocalTime从中获取日期值 GetLastWriteTime
Noda Time的主要设计决策之一是,计算机的本地时区设置不应产生任何副作用.在内部, GetLastWriteTime电话GetLastWriteTimeUtc().ToLocalTime().所以只要打电话GetLastWriteTime,你就违反了这个理想.
读取文件时间的正确Noda Time类型将是Instant.
Instant instant = Instant.FromDateTimeUtc(File.GetLastWriteTimeUtc(file));
Run Code Online (Sandbox Code Playgroud)
从那里,如果您想要当地的日期和/或时间,那么您可以申请时区.
首先,确定您想要的时区.例如:
DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/New_York"];
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因需要使用计算机自己的本地时区,请使用以下命令:
DateTimeZone zone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
Run Code Online (Sandbox Code Playgroud)
然后将时区应用到文件时间的瞬间:
ZonedDateTime zonedDateTime = instant.InZone(zone);
Run Code Online (Sandbox Code Playgroud)
然后你可以选择其中任何一个,具体取决于你究竟在寻找什么:
LocalDateTime localDateTime = zonedDateTime.LocalDateTime;
LocalDate date = zonedDateTime.Date;
LocalTime time = zonedDateTime.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)
此外,您应该了解在磁盘上,文件时间取决于您正在使用的文件系统的类型.
如果您使用的是NTFS,则磁盘上的时间将以UTC格式记录.这是非常需要的.
如果您正在使用exFAT,则磁盘上的时间将记录在本地日期+时间,但它还包括与UTC的偏移量,因此可以轻松地将其转换回UTC而不会产生歧义.
如果使用FAT或FAT32文件系统,则使用本地时间记录磁盘上的时间,该时间区域是写入文件时生效的时区.
这会产生不明确的数据,因为您可能在夏令时回退期间写入文件,或者您可能正在使用不同的时区设置或完全不同的计算机读取数据.
这是格式化任何可能用作exFAT而不是FAT32的USB拇指驱动器或SD卡的理由.
| 归档时间: |
|
| 查看次数: |
5613 次 |
| 最近记录: |