我需要创建一个日期和时间设置在特定时区(西亚标准时间、西欧标准时间等(的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方法。
只需确保传递的DateTime
的Kind
属性为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);;