4

是否可以将以下日期字符串转换为DateTime对象?

"Friday 31 August 2012";
"26-Jul-2012"
"190811"

我尝试过这种形式:

DateTime.TryParse("Friday 31 August 2012"
                , CultureInfo.InvariantCulture.NumberFormat
                , DateTimeStyles.None
                , out tradeDate);

但它不起作用。

4

4 回答 4

3

是否可以在正确的日期时间转换此字符串?“2012 年 8 月 31 日星期五”;“2012 年 7 月 26 日” “190811”

是的,当您以特定格式解析日期时,您应该使用DateTime.TryParseExactDateTime.TryParse将在内部调用DateTime.Parse,它只会尝试使用一些预定义的格式来解析日期。从文档:

DateTime.Parse(String) 方法尝试将日期和时间值的字符串表示形式转换为其等效的 DateTime。要解析的字符串可以采用以下任何一种形式:

  • 带有日期和时间组件的字符串。

  • 带有日期但没有时间组件的字符串。

  • 带有时间但没有日期组件的字符串。

  • 包含时区信息并符合 ISO 8601 的字符串。例如,以下两个字符串中的第一个指定协调世界时 (UTC);第二个指定比 UTC 早 7 小时的时区时间:

    2008-11-01T19:35:00.0000000Z

    2008-11-01T19:35:00.0000000-07:00

  • 包含 GMT 指示符并符合 RFC 1123 时间格式的字符串。例如:

    Sat, 01 Nov 2008 19:35:00 GMT

  • 包含日期和时间以及时区偏移信息的字符串。例如:

    03/01/2009 05:42:00 -5:00

重要的是要注意,当您不提供这些方法时,它会从当前线程中获取任何类型的文化信息,如果您没有明确设置,则往往是您机器的文化信息。因此,如果您尝试解析的日期属于该特定文化,那么它们通常会解析正常,例如两者"Friday 31 August 2012"/"26-Jul-2012"解析都TryParse适用于我,因为我的默认文化是 en-GB,但是,"190811"失败(我想适用于所有文化)因为它不是系统识别的日期格式。因此为什么TryParseExact更可靠。

于 2012-12-11T10:53:42.823 回答
2

当您知道格式时,您应该使用ParseExact格式DateTime

因此,要解析“2012 年 8 月 31 日星期五”,请使用

DateTime tradeDate =
DateTime.ParseExact("Friday 31 August 2012", "dddd dd MMMM yyyy", CultureInfo.InvariantCulture);

该格式还具有数组重载,因此您可以指定多个来代替"dddd dd MMMM yyyy"您的解析需求。

相似的东西

于 2012-12-11T10:59:51.270 回答
1

您可以使用DateTime.TryParseExact正确的格式:

string[] dateStrings = new[] { "Friday 31 August 2012", "26-Jul-2012", "190811"};
DateTime date = DateTime.MinValue;
string[] formats = new[] { "dddd dd MMMM yyyy", "dd-MMM-yyyy", "ddMMyy" };
IEnumerable<DateTime> dates = dateStrings
    .Where(ds => DateTime.TryParseExact(ds
        , formats
        , CultureInfo.InvariantCulture
        , DateTimeStyles.None
        , out date))
    .Select(ds => date);

自定义日期和时间格式字符串

使用您的示例数据进行演示

于 2012-12-11T10:59:57.617 回答
0

使用TryParseExact并提供一组格式化字符串:

DateTime.TryParseExact("Friday 31 August 2012"
                , new string[] {"dddd dd MMMM yyyy", "dd-MMM-yyyy", "ddMMyy"}
                , CultureInfo.InvariantCulture.NumberFormat
                , DateTimeStyles.None
                , out tradeDate);

我建议阅读 MSDN 上的自定义日期和时间格式字符串

于 2012-12-11T10:58:56.163 回答