加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ConvertTimeToUtc总是关闭一个小时

发布时间:2020-12-15 23:32:49 所属栏目:百科 来源:网络整理
导读:我在将datetime转换为UTC时面临问题. 用户在webform中的mydate中输入日期,我们需要将其转换为UTC并将其存储在DB中. 用户还从列表中选择存储在selectedTimeZone变量中的时区.所以我们必须将mydate从selectedTimeZone转换为UTC. TimeZoneInfo.ConvertTimeToUtc
我在将datetime转换为UTC时面临问题.
用户在webform中的mydate中输入日期,我们需要将其转换为UTC并将其存储在DB中.

用户还从列表中选择存储在selectedTimeZone变量中的时区.所以我们必须将mydate从selectedTimeZone转换为UTC.

TimeZoneInfo.ConvertTimeToUtc(mydate,selectedTimeZone);

示例#1:

If mydate = 05/02/2016 09:00 AM and selectedTimeZone = EST (-5:00) then
TimeZoneInfo.ConvertTimeToUtc(mydate,selectedTimeZone) returns
05/02/2016 13:00

这是一个小时

实施例#2

If mydate = 05/02/2016 09:00 AM and selectedTimeZone = IST (indian
standard time) (+5:30) then TimeZoneInfo.ConvertTimeToUtc(mydate,
selectedTimeZone) returns 05/02/2016 03:30

哪个是对的

有这样的例子.

有什么问题?

编辑:

我不需要将用户输入转换为DateTime,因为.net这样做,我们在mvc动作方法参数中得到mydate.

我通过将机器的本地时区设置为UTC,伦敦,IST来尝试它,但它对输出没有影响.

解决方法

似乎给定时区的调整规则在这里发挥作用.请使用以下代码:

var mydate = new DateTime(2016,05,02,9,0);            
var selectedTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var dstRule = selectedTimeZone.GetAdjustmentRules().FirstOrDefault(c => c.DateStart < mydate && c.DateEnd > mydate);

EST时区只有一个调整规则在给定时间有效(从2007年开始有效),此规则适用于每年3月的第2个星期日到11月的第一个星期日,在此期间调整时间为1小时.这就是你观察这种行为的原因.如果您尝试将此日期之外的日期转换为此规则(例如,在2月份),您将获得所期望的结果.

所以澄清一下:EST时区有UTC-5的基本偏移量,但由于夏令时夏令时变为UTC-4,而且因为你的时间是“夏天” – .NET实际上正确地将它转换为UTC,所以它不是“关闭”小时”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读