我需要从字符串中解析日期和时间。问题是字符串可以有任何可能的格式。但我也得到格式字符串。
所以我得到了:
Date = "9/15/2010"
Time = "16:12:45"
DateFormat = "M/dd/yyyy"
TimeFormat = "h:mm:ss"
TimeZone = "+2:00:00" // +/- and time in TimeFormat
但我在解析这些字符串时遇到了一些问题。
我无法解析时间
DateTime.ParseExact("16:12:45","h:mm:ss",null,DateTimeStyles.None);
不起作用并导致FormatException。这次电话有什么问题?
如果DateFormat包含斜杠,我需要转义它们@"M\/dd\/yyyy"
。还有其他需要转义的字符吗?
我可以将整个DateTime解析为一个吗?有点像:
DateTime.ParseExact(Date+' '+Time+' '+TimeZone,DateFormat+' '+TimeFormat+' +'+TimeFormat,null,DateTimeStyles.None);
答案 0 :(得分:2)
这次电话有什么问题?
“h:mm:ss”格式字符串要求hours元素采用12小时格式(h
);字符串中的小时数为24小时格式,因此您需要使用H
代替:
DateTime.ParseExact("16:12:45", "H:mm:ss", null, DateTimeStyles.None);
是否还有其他需要转义的字符?
字符串中与a format specifier发生冲突的任何文字字符都需要进行转义。例如,/
是日期分隔符,\/
表示文字/
字符; :
是时间分隔符,但\:
表示文字:
字符; y
是年度说明符之一,但\y
是文字y
字符。
我可以将整个DateTime解析为一个吗?
是
答案 1 :(得分:0)
您知道原始字符串属于哪种文化吗?如果这样做,您可以在调用Parse()
时指定特定于区域性的DateTimeStyleDateTime date = DateTime.Parse("<your specific date>", System.Globalization.CultureInfo.GetCultureInfo("<your culture>").DateTimeFormat);
答案 2 :(得分:0)
创建自定义DateTimeFormatInfo并将其传递到DateTime.Parse。像这样:
string dateValue = string.Format("{0} {1}", "9/15/2010", "16:12:45");
var customDateTimeFormatInfo = new DateTimeFormatInfo();
customDateTimeFormatInfo.FullDateTimePattern = string.Format("{0} {1}", "M/dd/yyyy", "h:mm:ss");
DateTime dt = DateTime.Parse(dateValue, customDateTimeFormatInfo);
无需转义并处理您的“h:mm:ss”罚款,无需修改。
答案 3 :(得分:0)
这个怎么样?
var @return = (DateTime?)null;
if (source != null)
{
source = source.Trim();
if (source.Length > 0)
{
var fs = new string[]
{
"d MMMM yyyy h:mm tt",
"d MMMM yyyy h:mm:ss tt",
"d MMMM yyyy HH:mm",
"d MMMM yyyy HH:mm:ss",
"d MMMM yyyy",
"d/M/yy h:mm tt",
"d/M/yy h:mm:ss tt",
"d/M/yy HH:mm",
"d/M/yy HH:mm:ss",
"d/M/yy",
"d/M/yyyy HH:mm",
"d/M/yyyy HH:mm:ss",
"d/M/yyyy h:mm:ss tt",
"d/M/yyyy",
"d/M/yyyy h:mm tt",
"d-MMMM-yy HH:mm",
"d-MMMM-yyyy h:mm tt",
"d-MMMM-yyyy h:mm:ss tt",
"d-MMMM-yyyy HH:mm",
"d-MMMM-yyyy HH:mm:ss",
"d-MMMM-yyyy",
"d-MMM-yy",
"d-MMM-yy h:mm tt",
"d-MMM-yy h:mm:ss tt",
"d-MMM-yy HH:mm",
"d-MMM-yy HH:mm:ss",
"d-MMM-yyyy",
"d-M-yy h:mm tt",
"d-M-yy h:mm:ss tt",
"d-M-yy HH:mm",
"d-M-yy HH:mm:ss",
"d-M-yy",
"d-M-yyyy",
"yyyy/M/d h:mm tt",
"yyyy/M/d h:mm:ss tt",
"yyyy/M/d HH:mm",
"yyyy/M/d HH:mm:ss",
"yyyy/M/d",
"yyyy-M-d h:mm tt",
"yyyy-M-d h:mm:ss tt",
"yyyy-M-d HH:mm",
"yyyy-M-d HH:mm:ss",
"yyyy-M-d",
"yyyy-MM-ddTHH:mm:ss",
};
@return = DateTime.ParseExact(source, fs,
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.None);
}
}
return @return;