我有一个日期格式的字符串。我想将其转换为DateTime
对象。但是我不确定字符串的格式。
有没有我可以使用的方法来处理以下输入?
"12/31/2015", "31/12/2015", "2015-12-31"
我有一个日期格式的字符串。我想将其转换为DateTime
对象。但是我不确定字符串的格式。
有没有我可以使用的方法来处理以下输入?
"12/31/2015", "31/12/2015", "2015-12-31"
您可以将 TryParseExact 与预期格式列表一起使用。
string[] formats = { "MM/dd/yyyy", "dd/MM/yyyy", "yyyy-MM-dd" };
DateTime outputDate;
DateTime.TryParseExact(inputText, formats,
CultureInfo.InvariantCulture, DateTimeStyles.None, out outputDate)
DateTime.TryParseExact
方法有一个重载,它将您的格式作为字符串数组。
string s = "";
DateTime dt;
var array = new[] {"MM/dd/yyyy", "dd/MM/yyyy", "yyyy-MM-dd"};
if(DateTime.TryParseExact(s, array, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
//
}
我用作InvariantCulture
一个IFormatProvider
因为/
格式说明符具有特殊含义,即用当前文化或提供的文化日期分隔符替换我。这意味着,如果您使用CurrentCulture
并且它没有/
as a ,即使您的字符串和格式完全匹配DateSeparator
,您的解析也会失败。
对于您的示例,这种方式是好的。
但是 string like01/02/2015
是个问题,因为这个方法不能知道 this 是1 February 2015
or 2 January 2015
。在这种情况下,此方法会使用第一个成功匹配的格式解析您的字符串。
但是我不确定字符串的格式。
如果您想完全成功地解析所有示例,您必须知道它们的确切格式。
您可以使用允许的文化列表:
var list = new List<string> {"12/31/2015", "31/12/2015", "2015-12-31"};
var allowedCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (string s in list)
{
DateTime dt;
foreach (CultureInfo culture in allowedCultures)
{
if (DateTime.TryParse(s, culture, DateTimeStyles.None, out dt))
{
Console.WriteLine("{0} - {1}", culture.DisplayName, dt.ToShortDateString());
break;
}
}
}
你可以使用DateTime.Parse
. 试试这个代码:
// Define cultures to be used to parse dates.
CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"),
CultureInfo.CreateSpecificCulture("fr-FR"),
CultureInfo.CreateSpecificCulture("de-DE")};
// Define string representations of a date to be parsed.
string[] dateStrings = {"01/10/2009 7:34 PM",
"10.01.2009 19:34",
"10-1-2009 19:34" };
// Parse dates using each culture.
foreach (CultureInfo culture in cultures)
{
DateTime dateValue;
Console.WriteLine("Attempted conversions using {0} culture.",
culture.Name);
foreach (string dateString in dateStrings)
{
try {
dateValue = DateTime.Parse(dateString, culture);
Console.WriteLine(" Converted '{0}' to {1}.",
dateString, dateValue.ToString("f", culture));
}
catch (FormatException) {
Console.WriteLine(" Unable to convert '{0}' for culture {1}.",
dateString, culture.Name);
}
}
Console.WriteLine();