将c#中的某个本地时间转换为UTC
本文关键字:时间 转换 UTC | 更新日期: 2023-09-27 18:15:43
我正在尝试做这样的事情:
在客户端,我有日期选择器用于选择日期,下拉菜单用于选择小时,下拉时区用于选择用户时区。
我正在发送这个信息到服务器。在服务器端,我想完成以下操作:
获取日期和时间值,并检查time zone的值是什么。例如,如果是"UTC+1"(或任何其他UTC时间的+值),在保存之前将其转换为UTC。
我不确定如何做到这一点:我应该从客户端发送什么值作为时区信息,以便服务器可以检测到它是一个例如UTC+1。
我看到这样的例子:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
关于如何通过它的id找到什么是时区,但是我不能这样做:
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("UTC+1");
因为,我得到了一个异常,当然:
附加信息:时区ID 'UTC+1'在本地计算机。
有人知道什么是Id为所有UTC+-someNumber,或者有一种方法来检测时区从UTC字符串在一些不同的方式?
有人经历过这种转变吗?
据我所知,使用时区的唯一方法是使用操作系统中可用的全名。
你可以在这里找到类似的问题。
来自MSDN的列表在这里。
因此,似乎没有简单的方法来转换像"UTC+1"这样的字符串,除非您创建一个映射到框架支持的字符串
您可以使用TimeZoneInfo.CreateCustomTimeZone()
:
DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo targetTimeZone = TimeZoneInfo.CreateCustomTimeZone("MyId", TimeSpan.FromHours(1), "Somewhere", "Somewhere");
DateTime targetTime = TimeZoneInfo.ConvertTime(utcTime, targetTimeZone);
或者您可以使用DateTimeOffset
,或DateTime.AddHours(1)
:
var datetimeOffset = new DateTimeOffset(yourDateTime, TimeSpan.FromHours(1));
var otherDatetime = yourDateTime.AddHours(1);