如何在特定时区创建新的 DateTime 实例?

Mar*_*rko 6 c# datetime

给定一个特定的 TimeZoneInfo 实例,如何在指定的时区创建一个新的 DateTime 实例?例如,如果我有:

var tz = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
var date = new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
Console.WriteLine(TimeZoneInfo.ConvertTime(date, tz));
Run Code Online (Sandbox Code Playgroud)

无论我定义什么 DateTimeKind(Utc、本地或未指定),我总是收到 12/31/2016 7:00:00 PM。

我如何声明一个新的日期时间,该日期时间为美国东部标准时间 2017 年 1 月 1 日 0:00:00?

BRA*_*mel 8

您可以使用 TimeZoneInfo 来检索您的区域

您可以在这里找到时区

var zn = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
Run Code Online (Sandbox Code Playgroud)

要表示您正在使用当地东部标准时间,请使用DateTimeOffset结构而不是 DateTime

DateTimeOffset dateTimeOffset = new DateTimeOffset(new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Unspecified), zn.BaseUtcOffset); 
Run Code Online (Sandbox Code Playgroud)

为什么DateTimeOffset

DateTimeOffset is a representation of instantaneous time (also known as absolute time).