在C#中将一些本地时间转换为UTC

时间:2016-11-01 11:00:16

标签: c# datetime

我正在尝试这样的事情:

在客户端,我有选择日期的日期选择器,选择一小时的下拉选项,以及选择用户时区的时区下拉。

我将此信息发送到服务器。在服务器端,我想完成这个:

获取日期和时间值,并检查时区的值。 如果它是例如" UTC + 1" (或任何其他+ - UTC时间的值),在保存之前将其转换为UTC。

我不知道该怎么做:我应该从客户端发送什么值作为时区信息,以便服务器可以检测到它是例如UTC + 1.

我看到这样的例子:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 

关于如何通过id找出时区是什么,但我做不到这样的事情:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("UTC+1");  

因为,我当然得到例外:

  

其他信息:时区ID' UTC + 1'没找到了   本地电脑。

有人知道所有UTC + -someNumber的Id是什么,或者有办法以某种不同的方式从UTC字符串中检测时区?

有人有过这种转换的经验吗?

2 个答案:

答案 0 :(得分:1)

据我记得,使用时区的唯一方法是使用操作系统中提供的全名。

您可以找到类似的问题here

MSDN中的列表为here

所以似乎没有简单的方法来转换像“UTC + 1”这样的字符串,除非你创建一个映射到框架支持的字符串。

答案 1 :(得分:0)

您可以使用TimeZoneInfo.CreateCustomTimeZone()

DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo targetTimeZone = TimeZoneInfo.CreateCustomTimeZone("MyId", TimeSpan.FromHours(1), "Somewhere", "Somewhere");
DateTime targetTime = TimeZoneInfo.ConvertTime(utcTime, targetTimeZone);

或者您可以使用DateTimeOffsetDateTime.AddHours(1)

var datetimeOffset = new DateTimeOffset(yourDateTime, TimeSpan.FromHours(1));
var otherDatetime = yourDateTime.AddHours(1);