在数据库中以UTC格式保存日期时间

时间:2011-12-25 12:01:51

标签: c# asp.net datetime timezone timezone-offset

我在以UTC格式保存日期时遇到问题。 我之前将datetime作为用户输入,我希望将datetime的UTC值保存在数据库中。 我使用一个文本框(用于获取确切日期)和一个下拉列表(用于获取该日期的小时数)以从用户获取日期时间输入值。 下面是我的代码,用于在合并两个控件值后从用户获取确切的输入日期时间。 例如:25/12/2011作为日期和10小时合并两个值后的日期值是25/12/2011 10:00 AM 他的计算我在下面使用代码:

      string[] dateArray = HdnDPC_date1.Value.Split('/');
            string dtt = dateArray[1] + "/" + dateArray[0] + "/" + dateArray[2];
            var fdate = Convert.ToDateTime(dtt);

           DateTime dadate = new DateTime(Convert.ToInt32(dateArray[2]), Convert.ToInt32(dateArray[1]), Convert.ToInt32(dateArray[0]));
            dadate = Convert.ToDateTime(fdate).AddHours(deadlineHr);
代码下方的

用于转换UTC中的日期时间值

            DateTime DeadLine = TimeZoneInfo.ConvertTimeToUtc(dadate);

但是代码没有根据时区转换输入日期时间,它总是根据“中央时区,美国和加拿大”进行转换 但我想根据用户的时区转换该日期时间。

请帮助我确定这个问题为什么会发生这种情况。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用ToUniversalTime功能

DateTime univDateTime = DateTime.Now.ToUniversalTime();

有关ToUniveralTime here

的更多信息

答案 1 :(得分:1)

您需要指定用户的时区。例如:

TimeZoneInfo.ConvertTimeToUtc(dadate, 
            TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));

答案 2 :(得分:0)

将线程的当前文化设置为用户的文化,如:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);

请参阅http://msdn.microsoft.com/en-us/library/bz9tc508.aspx