2014-05-08 27 views
2

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

回答

2

您的字符串格式不正确。它必须与您的字符串格式完全匹配。您可以改用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日取决于您可以解析它的自定义格式。

+0

谢谢。它帮助了我。但是有可能尝试使用几种优先格式,然后尝试使用哪种格式来获得确切的价值。我已经通过嵌套try catch来完成它。有没有更好的方法。 我注意到我的格式是错误的。 – pcbabu

+1

@pcbabu不客气。 'DateTime.TryParseExact'方法[有一个重载](http://msdn.microsoft.com/en-us/library/h9b85w22%28v=vs.110%29.aspx),它将格式视为_string array_。这意味着您可以在您的方法中提供多个字符串格式。如果你的字符串匹配你的一种格式,这个方法返回'true'。 –

1

你有错误的格式字符串,你使用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); 
0

尝试如下

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)) 
0

您可以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"); 
} 
相关问题