如何在将时间转换为特定时区和UTC时获得偏移量?C#
我正在尝试将日期转换为UTC格式,以便获得正确的偏移量。我在简单的如何在将时间转换为特定时区和UTC时获得偏移量?C#,c#,datetime,C#,Datetime,我正在尝试将日期转换为UTC格式,以便获得正确的偏移量。我在简单的DateTime中使用ToString(“O”)。现在它可以工作了 现在,当我将当前时间(EST)转换为CST(中央)或MST(山区)时,我不会得到偏移量。我错过了什么?还有别的办法吗 代码: 这是DateTime的预期行为。如果需要保留时区信息,请改用DateTimeOffset 输出差异的原因是DateTime。现在和centralTime/mountainTime是不同的类型:DateTime在转换前是本地的,但转换后变成未
DateTime中使用ToString(“O”)
。现在它可以工作了
现在,当我将当前时间(EST)转换为CST(中央)或MST(山区)时,我不会得到偏移量。我错过了什么?还有别的办法吗
代码:
这是DateTime
的预期行为。如果需要保留时区信息,请改用DateTimeOffset
输出差异的原因是DateTime。现在
和centralTime
/mountainTime
是不同的类型:DateTime
在转换前是本地的
,但转换后变成未指定的
运行以下程序以确认这一点:
var now = DateTime.Now;
Console.WriteLine(now.Kind);
var centralTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now, "Central Standard Time");
Console.WriteLine(centralTime.Kind);
var mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now, "Mountain Standard Time");
Console.WriteLine(mountainTime.Kind);
无法更改该行为,因为DateTime
不存储偏移量;它依靠两个众所周知的偏移量来解释时区-Local
表示您的本地时区,UTC
表示UTC时区
第三个选项,Unspecified
,意味着DateTime
的值本身不能解释为绝对值,因为时区已从中剥离。您的代码知道它是什么时区,因为您进行了转换,但是关于时区的信息是程序设计的一部分,而不是相应的DateTime
对象的一部分。NET专门添加了DateTimeOffset
对象来解决此问题
var now = DateTime.Now;
Console.WriteLine(now.Kind);
var centralTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now, "Central Standard Time");
Console.WriteLine(centralTime.Kind);
var mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now, "Mountain Standard Time");
Console.WriteLine(mountainTime.Kind);