给定一个特定的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的新日期时间?
答案 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
谢谢,希望这可以帮到你。