我正在申请。该应用程序使用日期格式,如
"2012-11-21 15:22:35"
。
我已经知道格式为"yyyy-MM-dd HH:mm:ss"
。但是我怎么能以编程方式找到日期和时间任意输入字符串的时间格式?有没有办法做到这一点?
答案 0 :(得分:7)
这可能对你有帮助.. (在数组中,添加更多格式以进行检查)
string[] formats = {"M/d/yyyy", "MM/dd/yyyy",
"d/M/yyyy", "dd/MM/yyyy",
"yyyy/M/d", "yyyy/MM/dd",
"M-d-yyyy", "MM-dd-yyyy",
"d-M-yyyy", "dd-MM-yyyy",
"yyyy-M-d", "yyyy-MM-dd",
"M.d.yyyy", "MM.dd.yyyy",
"d.M.yyyy", "dd.MM.yyyy",
"yyyy.M.d", "yyyy.MM.dd",
"M,d,yyyy", "MM,dd,yyyy",
"d,M,yyyy", "dd,MM,yyyy",
"yyyy,M,d", "yyyy,MM,dd",
"M d yyyy", "MM dd yyyy",
"d M yyyy", "dd MM yyyy",
"yyyy M d", "yyyy MM dd"
};
DateTime dateValue;
foreach (string dateStringFormat in formats)
{
if (DateTime.TryParseExact(strDateTime, dateStringFormat,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateValue))
//Console.WriteLine("Converted '{0}' to {1}.", dateStringFormat, dateValue.ToString("yyyy-MM-dd"));
Console.WriteLine( dateStringFormat);
}
答案 1 :(得分:3)
我认为你会遇到月份值为< = 12的日期字符串问题,因为这意味着该字符串的格式可以是"yyyy-MM-dd"
或"yyyy-dd-MM"
除非您在解析器中添加首选项,否则无法知道哪一个是正确的。
例如:
2012/08/07
- “这可能是7月还是8月?”
你可以强制它,并希望有一个与格式匹配的CultureInfo
var datestring = "2012-10-05 12:00:03";
DateTime time;
var matchingCulture = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(ci => DateTime.TryParse(datestring, ci, DateTimeStyles.None, out time))
答案 2 :(得分:2)
如果您想识别格式,几乎无法100%确定地执行此操作。但是,您可能希望浏览给定CultureInfo
和TryParse
支持的所有格式。不幸的是,这可能会产生不正确的结果,因为无法用这样的方式告诉什么是年,月和日:
10/11/12
根据您的文化偏见,您可以将其解释为2012年10月11日; 2012年11月10日或2010年11月12日。
你还没有提到你想对日期做什么,所以我会给你定期的最佳实践:
广告1.转换为不变日期&时间格式使用:
DateTime now = DateTime.UtcNow;
string formatted = now.ToUniversalTime.ToString(CultureInfo.InvariantCulture);
或(转换为ISO8601 - 格式化):
string formatted = now.ToString("u");
同样,您可以从不变格式解析DateTime:
DateTime result;
string source = "11/20/2012 11:22:33";
if (DateTime.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result))
{
// do something with result
}
或(通用格式不需要CultureInfo):
DateTime result;
string source = "2012-11-20 11:22:33Z";
if (DateTime.TryParse(source, out result))
{
// do something
}
Ad 2& 3.格式化和解析特定文化类似于格式化和解析不变日期,但您需要将InvariantCulture替换为检测到的特定实例,例如CultureInfo.CurrentCulture
。
根据应用程序的类型,您可能需要使用专用的日历控件,即jQuery UI Datepicker。
答案 3 :(得分:-1)
使用以下代码:
string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat;