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

时间:2017-07-24 20:58:20

标签: 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));

无论我定义什么DateTimeKind(Utc,Local或Unspecified),我总是在12/31/2016 7:00:00 PM。

如何在美国东部标准时间宣布2017年1月1日0:00:00的新日期时间?

2 个答案:

答案 0 :(得分:2)

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

您可以在此处找到timezones

var zn = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

表示您使用的是本地东部标准时间使用DateTimeOffset结构而不是DateTime

DateTimeOffset dateTimeOffset = new DateTimeOffset(new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Unspecified), zn.BaseUtcOffset); 

为什么DateTimeOffset

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

答案 1 :(得分:1)

您可以使用timezoneID来指定要创建日期时间对象的时区。

TimeZoneInfo tzone= TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard 
Time");
DateTime dt = DateTime.Now();

稍后您只需将日期时间转换为所需的时区。

var datetime2 = TimeZoneInfo.ConvertTimeFromUtc(dt , tzone);

这是您可以找到所有时区ID的链接。 TimeZoneIDs

谢谢,希望这可以帮到你。