如何获得基于DateTime和TimeZone Offset的UTC时间

本文关键字:Offset UTC 时间 TimeZone 何获得 DateTime | 更新日期: 2023-09-27 18:17:01

我有一个datetime对象,并且我知道UTC偏移量(双精度)。我如何从这两个信息中得到UTC时间?

我看到的所有示例都需要一个时区。好吧,我不知道时区是什么,这应该不重要。如果我有一个-7的偏移量,它可以是PDT,也可以是MST -这真的是无关紧要的,因为两者都会产生相同的UTC。我必须将偏移量转换为时区,这样"tuniversaltime"就可以将偏移量拉回来,这似乎真的很愚蠢。

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

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对象)

如何获得基于DateTime和TimeZone Offset的UTC时间

就用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时区…)