我正在尝试这样的事情:
在客户端,我有选择日期的日期选择器,选择一小时的下拉选项,以及选择用户时区的时区下拉。
我将此信息发送到服务器。在服务器端,我想完成这个:
获取日期和时间值,并检查时区的值。 如果它是例如" 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字符串中检测时区?
有人有过这种转换的经验吗?
答案 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);
或者您可以使用DateTimeOffset
或DateTime.AddHours(1)
:
var datetimeOffset = new DateTimeOffset(yourDateTime, TimeSpan.FromHours(1));
var otherDatetime = yourDateTime.AddHours(1);