是否可以将以下日期字符串转换为DateTime
个对象?
"Friday 31 August 2012"; "26-Jul-2012" "190811"
我试过这种形式:
DateTime.TryParse("Friday 31 August 2012"
, CultureInfo.InvariantCulture.NumberFormat
, DateTimeStyles.None
, out tradeDate);
但它不起作用。
答案 0 :(得分:3)
可以在正确的日期时间转换此字符串吗? “2012年8月31日星期五”; “2012年7月26日”“190811”
是的,当你以特定格式解析日期时,你应该使用DateTime.TryParseExact。 DateTime.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"
来满足你的解析需求。
答案 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);
答案 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。