字符串转换为datetime

时间:2012-12-11 10:51:17

标签: c# string datetime

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

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

我试过这种形式:

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

但它不起作用。

4 个答案:

答案 0 :(得分: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为何更可靠。

答案 1 :(得分:2)

当您知道ParseExact

的格式时,您应该使用DateTime格式

所以解析“2012年8月31日星期五”使用

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

格式也有一个数组重载,所以你可以指定多个"dddd dd MMMM yyyy"来满足你的解析需求。

something similar

答案 2 :(得分: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);

Custom Date and Time Format Strings

DEMO with your sample data

答案 3 :(得分: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上阅读Custom Date and Time Format Strings