我需要创建一个具有特定时区(西亚标准时间、西欧标准时间等)的日期和时间的日期时间。
DST 必须保留,因此偏移量不存在,因为对于给定时区,一年中的一半时间为 +2h,而另一半时间为 +3h。
然后我想将日期转换为UTC。
我试图以这样一种方式来做,以便我可以稍后添加这个时区偏移量。但是,首先我不喜欢这个解决方案,我担心时间每年更改两次时我会损失一个小时,其次我得到一个错误:
"The UTC Offset for Utc DateTime instances must be 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);;
关于c# - 在特定时区创建 DateTime 然后转换为 utc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68151071/