如何在c#中将字符串“MM-DDTHH:mm”转换为DateTime?

时间:2013-09-01 09:29:32

标签: c# datetime

在我的代码中,我可以获得两种代表dateTime的字符串:

1。"2013-09-05T15:55"

2。"09-05T19:10"

如何将其转换为有效的DateTime?

我尝试了以下代码,但是它引发了第二种格式的异常:

String departureDateStr = "09-05T19:10";  
DateTime dt = Convert.ToDateTime(departureDateStr);

如何将第二种类型的字符串转换为有效的DateTime? 我需要某种字符串操作吗?

THX,

阿米尔

3 个答案:

答案 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);
   }
}