我正在尝试使用DateTimeOffset在任何时区传达特定的时间点。我不知道如何使用TimeZoneInfo处理夏时制。

var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());

var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.BaseUtcOffset));

打印输出:

2010/6/2下午4:37:19
2010/6/2下午3:37:19 -06:00

我在中央时区,我们目前处于夏令时。
我试图让第二行读取:

2010/6/2下午4:37:19 -05:00
BaseUtcOffset显然不会根据DST进行更改。

如何获得具有正确偏移值的正确时间?

最佳答案

您需要从TimeZoneInfo获取UtcOffset,然后将其传递给ToOffset()方法:

var dt = DateTime.UtcNow;
Console.WriteLine(dt.ToLocalTime());

var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
Console.WriteLine(utcOffset.ToOffset(tz.GetUtcOffset(utcOffset)));

关于c# - 如何在夏令时期间使用TimeZoneInfo获取本地时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2961848/

10-11 02:28