c# - 在特定时区创建 DateTime 然后转换为 utc
问题描述
我需要创建一个具有设定日期和时间的 DateTime,该日期和时间将位于特定时区(西亚标准时间、西欧标准时间等)。
必须保留 DST,因此偏移量已取消,因为对于给定的时区,一年中有一半是 +2h,另一半是 +3h。
然后我想将日期转换为 UTC。
我试图这样做,以便以后可以添加这个时区偏移量。但是,首先我不喜欢这种解决方案,而且我担心每年两次更改时间会损失一个小时,其次我会收到错误消息:
“UTC 日期时间实例的 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方法。
只要确保Kind
传递的属性DateTime
是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);;
推荐阅读
- github - Github 桌面缓存已删除的本地存储库
- java - org.springframework.web.reactive.function.client.WebClientRequestException:连接被拒绝:/0:0:0:0:0:0:0:1:80;
- python - GCP Dataflow 管道在 DirectRunner 中的运行速度比 DataflowRunner 快
- node.js - fs-extra readFile 不是函数
- java - 增强的 For 循环查询
- r - 以点 (.) 和下划线 (_) 开头的对象创建 R
- json - 如何在python3中从具有多个值的json键中提取一个signle值?
- reactjs - 使用 ReactJS 上传文件
- maven - 无法在 Elasticsearch 5.6.16 上初始化类 org.elasticsearch.painless.WriterConstants 并且依赖于 jayway
- php - 操作 WooCommerce 类别描述输出