我想在东部标准时间初始化DateTime,然后转换为通用时间。
我有一个DateTime(CurrentDT),其TimeZone未设置,但它在EST中。 它是从以下sting
解析出来的“ddd,d MMM yyyy H:mm:ss”
我编写了以下代码来解决问题。
TimeZoneInfo currentTimeZone=null;
currentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
CurrentDT=TimeZoneInfo.ConvertTime(CurrentDT, currentTimeZone);
CurrentDT = CurrentDT.ToUniversalTime();
问题是看起来我做错了。我正在将DateTime(在本地时区转换为Eastern Standerd Time)转换为通用标准时间。 我不知道如何初始化CurrentDt的TimeZone。 请帮助我理解谢谢你。
答案 0 :(得分:1)
如果我记得很清楚,DateTime
并未保留有关TimeZone
的信息,但如果您知道特定DateTime
中的某个TimeZone
,则可以从中获取UTC做这样的事情:
var UtcDateTime = TimeZoneInfo.ConvertTimeToUtc(CurrentDt, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); // 1st param is the date to convert and the second is its TimeZone
答案 1 :(得分:1)
在某些情况下,您可以使用(相对)新类型DateTimeOffset
,例如:
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var offset = est.GetUtcOffset();
var dataTimeOffset = new DateTimeOffset(dateTimeWithoutOffset, offset);
var result = dateTimeOffset.UtcDateTime;
由于您应该在不同的时区工作,DateTimeOffset
可以使您的代码更加清晰。