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

Xai*_*oft 43 c#

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

yyyy-MM-dd

当我尝试:

string date = "20121004";

Convert.ToDateTime(date).ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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";
     }
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*ier 79

只需使用DateTime.ParseExact方法:

string date = "20121004";

string result = DateTime.ParseExact(date, "yyyyMMdd",
                CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)

这还提供了在使用连字符重新格式化之前验证日期的优点.ParseExact如果日期不在有效范围内,或者格式不匹配,则抛出可以捕获的异常.

  • **"抛出一个你可以捕获的异常"**如果你想处理错误情况,请使用`TryParseExact`而不是异常捕获.(异常不应用于正常的程序流控制.) (8认同)
  • @Xaisoft:抱歉,忘记了 ``DateTimeStyles`` 参数。它应该是``DateTime.TryParseExact(date, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result)``。 (2认同)

Sec*_*und 6

我收到错误:

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

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

如果您使用以下方法:

public static DateTime ParseExact(
    string s,
    string format,
    IFormatProvider provider,
    DateTimeStyles style
)
Run Code Online (Sandbox Code Playgroud)

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

public string ToString(
    string format,
    IFormatProvider provider
)
Run Code Online (Sandbox Code Playgroud)

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

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