【发布时间】: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
我需要知道字符串16-Aug-78 12:00:00 AM 的确切日期格式。我尝试了各种字符串,例如“ss-MMM-yy hh:mm:ss”。有什么方法可以找到它以转换为任何通用格式。我正在使用CultureInfo.InvariantCulture 类。
【问题讨论】:
标签: c# string datetime date-format culture
您的字符串格式错误。它必须与您的字符串格式完全匹配。您可以改用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 tt是InvariantCulture的标准日期和时间格式,您可以直接使用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 日,这取决于您可以解析的自定义格式。
【讨论】:
DateTime.TryParseExact 方法 has an overload 采用 字符串数组 的格式。这意味着您可以在方法中提供多种字符串格式。如果您的字符串与您的一种格式匹配,则此方法返回true。
尝试如下
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))
【讨论】:
你有错误的格式字符串,你使用 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);
【讨论】:
你可以试试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");
}
【讨论】: