【问题标题】:Save the Datetime in UTC in database将日期时间以 UTC 格式保存在数据库中
【发布时间】:2012-01-27 14:33:47
【问题描述】:

我在以 UTC 格式保存日期时间时遇到问题。 我将日期时间作为用户的输入,之后我想将该日期时间的 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);

但代码并未根据时区转换输入日期时间,它始终根据“美国和加拿大中部时区”进行转换 但我想根据用户的时区转换该日期时间。

请帮我找出这个问题发生的原因。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您可以尝试使用ToUniversalTime函数

        DateTime univDateTime = DateTime.Now.ToUniversalTime();
        

        更多关于ToUniveralTimehere

        【讨论】:

        • 你必须告诉它转换什么
        • @Shai: ToUniveralTime 时间总是根据当地时区给出时间。
        猜你喜欢
        • 1970-01-01
        • 2011-04-17
        • 2023-04-06
        • 2017-07-03
        • 2011-02-04
        • 2016-01-11
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        相关资源
        最近更新 更多