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

I want to initialize DateTime in EST and then convert to Universal TIme

我想用东部标准时间初始化 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();

问题是我好像做错了。我正在将本地时区的日期时间转换为东部标准时间,然后再转换为通用标准时间。 我不知道最初如何初始化 CurrentDt 的 TimeZone。 请帮助我理解谢谢。

如果我没记错的话,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

在某些情况下,您可以使用(相对)新类型 DateTimeOffset,如下所示:

var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var offset = est.GetUtcOffset();
var dataTimeOffset = new DateTimeOffset(dateTimeWithoutOffset, offset);
var result = dateTimeOffset.UtcDateTime;

由于要在不同的时区工作,DateTimeOffset可以使代码更清晰。