在我的代码中,我可以获得两种代表dateTime的字符串:
1。"2013-09-05T15:55"
2。"09-05T19:10"
如何将其转换为有效的DateTime?
我尝试了以下代码,但是它引发了第二种格式的异常:
String departureDateStr = "09-05T19:10";
DateTime dt = Convert.ToDateTime(departureDateStr);
如何将第二种类型的字符串转换为有效的DateTime? 我需要某种字符串操作吗?
THX,
阿米尔
答案 0 :(得分:8)
DateTime.TryParseExact有一个重载,允许您将多种格式作为数组传递。然后将每个日期字符串与数组中的各种格式进行比较,这样您就不需要提前知道要查找哪种格式。
string d1 = "2013-09-05T15:55";
string d2 = "09-05T19:10";
string[] formats = new string[] { "yyyy-MM-ddTHH:mm", "MM-ddTHH:mm" };
List<string> dates = new List<string>() { d1, d2 };
foreach (string date in dates)
{
DateTime dt;
if (DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
//dt successfully parsed
}
}
如果数组中没有任何格式与输入匹配, TryParseExact
也返回false而不是抛出异常。
答案 1 :(得分:2)
DateTime.ParseExact
使用custom datetime format string方法:
string departureDateStr = "09-05T19:10";
string departureDateStr2 = "2013-09-05T19:10";
var dt = DateTime.ParseExact(departureDateStr, "MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture);
var dt2 = DateTime.ParseExact(departureDateStr2, "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture);
或两种格式的通用调用:
var dt = DateTime.ParseExact(departureDateStr, new[] { "MM-ddTHH:mm", "yyyy-MM-ddTHH:mm" }, System.Globalization.CultureInfo.InvariantCulture);
答案 2 :(得分:1)
您可以使用DatetIme.ParseExact()方法。它使用指定的格式和特定于文化的格式信息将指定的日期和时间字符串表示形式转换为其DateTime
等效形式。字符串表示的格式必须与指定的格式完全匹配。
String departureDateStr = "09-05T19:10";
IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture;
string format = "MM-ddTHH:mm";
DateTime parsedDate = DateTime.ParseExact(departureDateStr, format, provider);
如果您需要多次转换,那么您甚至可以将其作为扩展方法,如下所示:
public static class StringExtensions
{
public static DateTime ToDate(this string str)
{
IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture;
string format = "MM-ddTHH:mm";
return DateTime.ParseExact(str, format, provider);
}
}