3

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

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

2."09-05T19:10"

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

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

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

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

谢谢,

阿米尔

4

3 回答 3

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 而不是抛出异常。

于 2013-09-01T09:36:56.350 回答
2

使用自定义日期时间格式字符串DateTime.ParseExact的方法:

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);
于 2013-09-01T09:33:25.487 回答
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);
   }
}
于 2013-09-01T09:36:10.253 回答