我想在EST中初始化DateTime,然后转换为Universal TIme

时间:2015-11-17 07:58:50

标签: c# datetime timezone

我想在东部标准时间初始化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。 请帮助我理解谢谢你。

2 个答案:

答案 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可以使您的代码更加清晰。