c# - 在特定时区创建 DateTime 然后转换为 utc

标签 c# .net-core

我需要创建一个具有特定时区(西亚标准时间、西欧标准时间等)的日期和时间的日期时间。

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方法。

只需确保传递的 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);;

关于c# - 在特定时区创建 DateTime 然后转换为 utc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68151071/

相关文章:

C# 在连接字符串中自动使用 PC 名称

c# - 如何在 MVC Core 和 AutoFac 中使用属性注入(inject)

c# - 数据库脚手架在 .Net Core 1.1 中停止工作

c# - 使用外部定义类型的 CSharpScript - 无法从类型 A 转换为 A

c# - 在wpf应用程序中读取excel文件内容

c# - 将 double 值转换为二进制值

c# 保存要查找的值列表的最佳类

c# - 项目未构建在事件配置中 Visual Studio MacOS .net Core

c# - 如何在单元测试中使用环境变量(.net core)

c# - 如何使用 OAuth 在 C# 中创建新的 Google Drive 服务