将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字符串在一些不同的方式?

有人经历过这种转变吗?

将c#中的某个本地时间转换为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);