在c#中找出字符串日期的日期时间格式

我正在申请。 该应用程序使用日期格式,如"2012-11-21 15:22:35"
我已经知道格式为"yyyy-MM-dd HH:mm:ss" 。 但是,如何以编程方式查找任意输入字符串的日期和时间格式? 有没有办法做到这一点?

这可能对你有帮助..(在数组中,添加更多格式来检查)

 string[] formats = {"M/d/yyyy", "MM/dd/yyyy", "d/M/yyyy", "dd/MM/yyyy", "yyyy/M/d", "yyyy/MM/dd", "Md-yyyy", "MM-dd-yyyy", "dM-yyyy", "dd-MM-yyyy", "yyyy-Md", "yyyy-MM-dd", "Mdyyyy", "MM.dd.yyyy", "dMyyyy", "dd.MM.yyyy", "yyyy.Md", "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); } 

我认为你会遇到月份值<= 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)) 

如果你想识别格式,几乎没有办法100%确定。 但是,您可能希望浏览给定CultureInfoTryParse支持的所有格式。 不幸的是,这可能会产生不正确的结果,因为无法用这样的方式告诉年,月和日是什么:

10/11/12

根据您的文化偏见,您可以将其解释为2012年10月11日; 2012年11月10日或2010年11月12日。

你没有提到你想对日期做什么,所以我会给你定期的最佳实践:

  1. 如果要在应用程序的不同模块之间传输日期,请使用不变日期格式。
  2. 如果您需要格式化日期和时间,请使用给定文化的默认日期格式。
  3. 谈论默认日期格式,如果您想接受最终用户输入的日期,您可能希望以文化的默认格式解析自由格式输入,或者您可以创建(或使用预先存在的)日期时间选择器控件。 后一种方法是优选的。

广告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

根据应用程序的类型,您可能希望使用专用的Calendar控件,即jQuery UI Datepicker 。

使用以下代码:

string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat;