如何找到日期字符串的确切格式?

Posted

技术标签:

【中文标题】如何找到日期字符串的确切格式?【英文标题】: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 类。

【问题讨论】:

【参考方案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();
Custom Date and Time Format Strings

或者,由于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");
 

【讨论】:

以上是关于如何找到日期字符串的确切格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到确切的字符串

如何使 iMacro 仅在 TXT 属性中找到确切的字符串

电脑如何修改日期格式

如何解析 ISO 8601 格式的日期?

oracle数据库如何改变日期格式

如何在 WPF 中找到任意字形的确切大小?