如何根据DateTime和TimeZone Offset获取UTC时间?

时间:2014-08-06 19:50:38

标签: c# datetime timezone utc

我有一个日期时间对象,我知道UTC偏移量(双倍)。如何从这两条信息中获取UTC时间?

我见过的所有例子都需要一个时区。好吧,我不知道什么时区,它应该不重要。如果我有-7的偏移量,它可能是PDT,或者它可能是MST - 它实际上是无关紧要的,因为要么产生相同的UTC。我必须将我所拥有的偏移量转换为时区似乎非常愚蠢,因此“ToUniversalTime”可以将偏移量拉回来。

老实说,我打算只使用这样的东西:

DateTime dateTime = new DateTime(2014, 8, 6, 12, 0, 0);
Double timeZone = -7.0;
string utc = String.Format("{0}-{1}-{2}T{3}:{4}:{5}{6}:{7}", startDate.Year, startDate.Month, startDate.Day, startDate.Hour, startDate.Minute, startDate.Second, (int) Math.Floor(timeZone), (timeZone % 1) * 60);

有人可以告诉我为什么这是个坏主意吗?

(某人可能会将此作为副本关闭,但我查看了其他十几个问题,但没有一个完全相同 - 他们都使用了TimeZoneInfo对象。)

1 个答案:

答案 0 :(得分:5)

只需使用DateTimeOffset

TimeSpan utcOffset = TimeSpan.FromHours(timeZone);
DateTimeOffset result = new DateTimeOffset(dateTime, utcOffset);
DateTime utc = result.UtcDateTime;

string utc = result.ToString("yyyy-MM-dd'T'HH:mm:ssK", CultureInfo.InvariantCulture);

目前尚不清楚为什么你最终希望它作为一个字符串......

(您可能还想考虑使用我的Noda Time项目,特别是因为您可能会看到时区ID是TZDB时区...)