在特定时区创建DateTime,然后转换为utc



我需要创建一个日期和时间设置在特定时区(西亚标准时间、西欧标准时间等(的DateTime。

夏令时必须保留,因此偏移量被取消,因为对于给定时区,一年中的一半时间是+2h,另一半时间是+3h。

然后我想将日期转换为UTC。

我试着这样做,我可以稍后添加这个时区偏移。然而,首先我不喜欢这种解决方案,我担心一年两次的时间变化会让我损失一个小时,其次我会得到一个错误:

"UTC DateTime实例的UTC偏移量必须是0;

var testTime = new DateTime(testDate.Year, testDate.Month, testDate.Day, 4, 0, 0, DateTimeKind.Utc);
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("West Asia Standard Time");
var timezoneTime = TimeZoneInfo.ConvertTimeFromUtc(runTime, timeZoneInfo);
var offset = timeZoneInfo.GetUtcOffset(timezoneTime);

我想得到这种代码

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("West Asia Standard Time");
var testTime = new DateTime(testDate.Year, testDate.Month, testDate.Day, 4, 0, 0, timeZoneInfo);
var utcTime = testTime.ToUniversalTime();

总之,我想要一个方法,通过年、月、日、小时、分钟和时区,作为回报,我会得到UTC的DateTime在javascript中有一些库,其中给定的时区是作为参数给定的,但我必须在服务器端执行。

您基本上需要TimeZoneInfo.ConvertTimeToUtc方法。

只需确保传递的DateTimeKind属性为Unspecified,否则该方法对sourceTimeZone参数有特殊期望,并将引发异常。

例如

var testTime = new DateTime(testDate.Year, testDate.Month, testDate.Day, 4, 0, 0);
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("West Asia Standard Time");
var utcTime = TimeZoneInfo.ConvertTimeToUtc(testTime, timeZoneInfo);;

相关内容

最新更新