Jon*_*ski 11 .net c# datetime date
中欧的通用TimeZoneInfo是否兼顾CET和CEST?
我有一个应用程序正在执行以下操作:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset);
var utcDate = dto.ToUniversalTime().DateTime;
Run Code Online (Sandbox Code Playgroud)
问题是这会返回错误的utcDate,因为BaseUtcOffset是+1而不是+2.似乎CET也有DST,并且根据一年中的时间它是+1或+2.
首先,我想赞扬mgnoonan使用Noda Time的答案:)但如果你感觉不那么冒险......
您已经使用了正确的时区 - 但您不应该使用BaseUtcOffset哪些文档不是关于DST:
获取当前时区的标准时间与协调世界时(UTC)之间的时差.
当你没有提供它DateTime来获取偏移量时,它不可能考虑DST :)
假设someDate是a DateTime,你可以使用:
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));
Run Code Online (Sandbox Code Playgroud)
或者只是ConvertTimeToUtc:
var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi);
Run Code Online (Sandbox Code Playgroud)
请注意,如果由于DST转换导致本地时间发生两次,或者根本不发生,则应该计算出您要执行的操作.
| 归档时间: |
|
| 查看次数: |
9066 次 |
| 最近记录: |