将20121004(yyyyMMdd)转换为有效日期时间?

我有一个以yyyyMMdd格式的字符串,我试图让它看起来像这样:

yyyy-MM-dd

当我尝试:

 string date = "20121004"; Convert.ToDateTime(date).ToString("yyyy-MM-dd"); 

我收到错误:

FormatException: String was not recognized as a valid DateTime.

以下工作或我是否会遇到问题:

 private string GetValidDate(string date,string format) { DateTime result; if(DateTime.TryParseExact(date, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) { return date; } else if(DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) { return DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); } else { return "Invalid Date Format"; } } 

只需使用DateTime.ParseExact方法:

 string date = "20121004"; string result = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); 

这还提供了在使用连字符重新格式化之前validation日期的优点。 如果日期不在有效范围内,或者格式不匹配, ParseExact会抛出您可以捕获的exception。

我收到错误:

FormatException:String未被识别为有效的DateTime。

您收到此错误是因为您没有告诉ToDateTime()方法如何解析您的字符串。

如果您使用以下方法:

 public static DateTime ParseExact( string s, string format, IFormatProvider provider, DateTimeStyles style ) 

你不会得到这个错误。 生成DateTime变量后,只需使用ToString()方法以yyyy-dd-mm格式显示它。

 public string ToString( string format, IFormatProvider provider ) 

http://msdn.microsoft.com/en-us/library/8tfzyc64
http://msdn.microsoft.com/en-us/library/9h21f14e

我知道这基本上重复了与其他人相同的信息,但它也使他能够理解他需要使用的两种方法实际上做了什么。

这是我使用的扩展方法。

 ///  /// Converts a string to a dateTime with the given format and kind. ///  /// The date time string. /// The date time format. /// Kind of the date time. ///  public static DateTime ToDateTime(this string dateTimeString, string dateTimeFormat, DateTimeKind dateTimeKind) { if (string.IsNullOrEmpty(dateTimeString)) { return DateTime.MinValue; } DateTime dateTime; try { dateTime = DateTime.SpecifyKind(DateTime.ParseExact(dateTimeString, dateTimeFormat, CultureInfo.InvariantCulture), dateTimeKind); } catch (FormatException) { dateTime = DateTime.MinValue; } return dateTime; } 

这有点难看,但这怎么样?

 date.Insert(6, "-").Insert(4, "-"); 

如果您可以假设您使用表示有效日期的字符串,并且您不需要执行任何其他日期逻辑,那么为什么要首先转到DateTime