【问题标题】:How to find exact format of a date string?如何找到日期字符串的确切格式?
【发布时间】:2014-05-08 07:31:30
【问题描述】:

我需要知道字符串16-Aug-78 12:00:00 AM 的确切日期格式。我尝试了各种字符串,例如“ss-MMM-yy hh:mm:ss”。有什么方法可以找到它以转换为任何通用格式。我正在使用CultureInfo.InvariantCulture 类。

【问题讨论】:

    标签: c# string datetime date-format culture


    【解决方案1】:

    您的字符串格式错误。它必须与您的字符串格式完全匹配。您可以改用dd-MMM-yy hh:mm:ss tt 格式。

    这里是LINQPad中的一个例子。

    string s = "16-Aug-78 12:00:00 AM";
    var date = DateTime.ParseExact(s, "dd-MMM-yy hh:mm:ss tt",
                                   CultureInfo.InvariantCulture);
    date.Dump();
    

    或者,由于dd-MMM-yy hh:mm:ss ttInvariantCulture的标准日期和时间格式,您可以直接使用DateTime.Parse这样的方法;

    string s = "16-Aug-78 12:00:00 AM";
    var date = DateTime.Parse(s, CultureInfo.InvariantCulture);
    date.Dump();
    

    这里是 demonstration

    有什么办法可以找到转换成任何通用格式的吗?

    除非您创建自己的格式,否则无法获取字符串的格式。只有你能准确地知道你的字符串格式是什么,电脑不能。

    例如; 01/02/2014 可以是 2014 年 2 月 1 日2014 年 1 月 2 日,这取决于您可以解析的自定义格式。

    【讨论】:

    • 谢谢。它帮助了我。但是是否可以优先尝试几种格式,然后尝试哪种格式是应用程序以获得准确的值。我已经通过嵌套的 try catch 完成了它。有没有更好的办法。我注意到我的格式错误。
    • @pcbabu 欢迎您。 DateTime.TryParseExact 方法 has an overload 采用 字符串数组 的格式。这意味着您可以在方法中提供多种字符串格式。如果您的字符串与您的一种格式匹配,则此方法返回true
    【解决方案2】:

    尝试如下

    var dstring = "16-Aug-78 12:00:00 AM";
    DateTime result;
    var matchingCulture = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(ci => DateTime.TryParse(dstring, ci, DateTimeStyles.None, out result))
    

    【讨论】:

      【解决方案3】:

      你有错误的格式字符串,你使用 ss 应该是 dd。这篇文章Custom Date and Time Format Strings 解释了自定义格式所需的内容。

      使用

      "dd-MMM-yy hh:mm:ss tt"
      

      代替

      "ss-MMM-yy hh:mm:ss"
      

      您可以使用DateTime.ParseExact 来解析字符串。

      DateTime dt = DateTime.ParseExact("16-Aug-78 12:00:00 AM", "dd-MMM-yy hh:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None);
      

      【讨论】:

        【解决方案4】:

        你可以试试DateTime.TryParseExact():

        string strDate = "16-Aug-78 12:00:00 AM";           
        DateTime datDate;
        if(DateTime.TryParseExact(strDate , new string[] {"dd-MMM-yy hh:mm:ss tt" },
                               System.Globalization.CultureInfo.InvariantCulture,
                               System.Globalization.DateTimeStyles.None, out datDate))
         {
           Console.WriteLine(datDate);
         }
        
         else
         {
           Console.WriteLine("Error in datetime format");
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          相关资源
          最近更新 更多