【问题标题】:c# Parsing UTC datetimec#解析UTC日期时间
【发布时间】:2016-05-22 10:41:27
【问题描述】:

我正在尝试将 11/23/2011 23:59:59 UTC +0800 解析为 c# datetime 对象,但尝试使用标准 datetime 解析方法,甚至是 datetime 精确解析,我得到的日期无效。

有什么想法吗?

【问题讨论】:

  • 你想几点?您是否居住在 UTC +08 的国家/地区?你想要你的 DateTime UTC 时间(所以 11 月 24 日 07:59)还是什么?
  • 转换为运行它的机器的本地时间

标签: c# parsing datetime


【解决方案1】:

我认为您需要使用 ParseExact http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

【讨论】:

    【解决方案2】:

    詹姆斯写的,你可以试试

    var dt = DateTime.ParseExact(
             "11/23/2011 23:59:59 UTC +0800", 
             "MM/dd/yyyy HH:mm:ss 'UTC' K", 
              CultureInfo.InvariantCulture);
    

    你会得到一个“本地”时间的日期。

    【讨论】:

      【解决方案3】:

      我建议您在格式字符串中解析为DateTimeOffset,而不是DateTimeas recommended in MSDN when using a time zone offset specifier

      using System;
      using System.Globalization;
      
      class Test
      {    
          static void Main(string[] args)
          {
              string text = "11/23/2011 23:59:59 UTC +0800";
              string pattern = "MM/dd/yyyy HH:mm:ss 'UTC' zzz";
      
              DateTimeOffset dto = DateTimeOffset.ParseExact
                  (text, pattern, CultureInfo.InvariantCulture);
              Console.WriteLine(dto);
          }
      }
      

      然后,您可以根据需要将其转换为 UTC 中的 DateTime 值,但没有“偏移量为 8 小时的 DateTime”之类的东西 - DateTime 要么被认为是通用的,要么是本地的或未指定,没有地方可以存储特定的偏移量。

      DateTimecurious type in various ways,可能会给粗心的开发人员带来问题。

      【讨论】:

        【解决方案4】:

        格式设置的Msdn:https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx

        public class Program
        {
            public static void Main()
            {
                 //original date
                string _date = "Thu Jan 15 11:32:09 +0200 2015";
                 // Describes the date format
                string _parsePattern = "ddd MMM dd HH:mm:ss zzz yyyy"; 
        
                 DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
        
                 //last settings
                Console.WriteLine(dto.ToString("dd.MM.yyyy hh:mm:ss",CultureInfo.CreateSpecificCulture("tr-TR")));
            }
        }
        

        对于扩展方法:

        public static DateTime getDateFromFormat(this string _date, string _parsePattern)
                {
                    DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
                    return Convert.ToDateTime(dto.ToLocalTime());
                }
        

        测试用:https://dotnetfiddle.net/xdnjGy

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-29
          • 1970-01-01
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-27
          相关资源
          最近更新 更多