TimeZoneInfo.ConvertTimeToUtc()的DateTime错误

时间:2016-05-19 10:32:06

标签: mysql sql-server date datetime

在我目前的任务中,我在日期时间计算中面临一些不匹配。这就像用户详细信息管理。用户将具有激活日期(dd / mm / yyyy)和到期日期(dd / mm / yyyy)。从UI将收集日期详细信息,并将其保存在SQL DB中。例如,如果用户XYZ今天(2016年5月19日)创建,则用户XYZ的激活日期为19-05-2016,有效期限设置为25-05-2016(基于用户需求)。 / p>

  

用户名:XYZ

     

激活日期:19-05-2016

     

到期日:25-05-2016

因此,当尝试在站点中显示详细信息时,将从SQL DB检索用户详细信息,并将日期时间转换为UTC时区,然后将详细信息传递到站点以供用户查看。在DB中,日期是原样,但在使用TimeZoneInfo.ConvertTimeToUtc()进行转换时,日期值减少1(如果日期为19-05-2016,则转换为28-05-2016)< / p>

select username, activationdate, expirydate from UserDetails where username = 'XYZ'

查询结果是,

username | activationdate          |  expirydate
------------------------------------------------------------
XYZ      | 2016-05-19 00:00:00.000 | 2016-05-25 00:00:00.000

转换为UTC后,

ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.expirydate);
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.activationdate);
// after execution of these statements
// ExpiryDate = 2016-05-18 00:00:00.000
// ActivationDate = 2016-05-24 00:00:00.000

所以在ConvertTimeToUtc()之后,实际激活日期2016-05-19 00:00:00.000转换为2016-05-18 00:00:00.000和到期日2016-05-25 00:00:00.000转换为2016-05-24 00:00:00.000我已经提到了一个链接,说TimeZoneInfo.ConvertTimeToUtc()将Convert the specified date and time to Coordinated Universal Time (UTC)。我还尝试在google将当前日期和时间在线转换为UTC,它将时间转换为UTC但我在日期上看不到这么大的差异。我的困惑是为什么这个UTC转换将日期值减少一个完整的日期?或者哪里出错了?

对此的任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

这里的问题是您将日期存储为2016-05-19 00:00:00.000。尝试获取准确的时间,包括来自用户的时间戳的分钟秒。我相信您来自IST,当它是12晚'时钟意味着他们在我们身后,这就是你看到前一个日期的原因。如果您有任何疑问,请告诉我。