如何转换字符串“;MM-DDTHH:MM”;到c#中的DateTime

本文关键字:MM DateTime 中的 MM-DDTHH 转换 字符串 何转换 | 更新日期: 2023-09-27 18:29:58

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

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

2."09-05T19:10"

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

我尝试了以下代码,但它为第二种格式抛出了一个异常:

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

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

thx,

Amir

如何转换字符串“;MM-DDTHH:MM”;到c#中的DateTime

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

使用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);

您可以使用DatetTime.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);
   }
}