将YYYYMMDD字符串转换为MM/DD/YYYY字符串

JTR*_*e86 4 c# datetime

我有一个以YYYYDDMM格式存储为字符串的日期.我想以'MM/DD/YYYY'格式显示该值.我用c#编程.我使用的当前代码如下:

txtOC31.Text = dr["OC31"].ToString().Trim();
strOC31date = dr["OC31DATE"].ToString().Trim();
DateTime date31 = DateTime.Parse(strOC31date);
strOC31date = String.Format("{0:MM/dd/yyyy}", date31);
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误,因为YYYYMMDD字符串(strOC31date)未被识别为有效的日期时间.

Ste*_*eve 19

DateTime.ParseExact带有一个例子

string res = "20120708";
DateTime d = DateTime.ParseExact(res, "yyyyddMM", CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString("MM/dd/yyyy"));
Run Code Online (Sandbox Code Playgroud)

  • 在最后一行中,格式字符串中的斜杠字符`/`将被转换为当前线程的日期分隔符字符串.如果你当前线程的文化碰巧有`/`作为日期分隔符,一切都很好.但是如果你在最后一行之前将文化设置为例如`new CultureInfo("da-DK")`(丹麦语 - 丹麦语),那么`/`将被转换为`-`.为了避免这种情况,一种方法是逃避斜杠,即`d.ToString(@"MM\/ dd\/ yyyy")`. (3认同)

Jam*_*are 11

当您尝试解析的字符串不是标准格式之一时,请使用ParseExact()(MSDN).这将允许您解析自定义格式,并将稍微更高效(我在这里的博客文章中比较它们).

DateTime date31 = DateTime.ParseExact(strOC31date, "yyyyMMdd", null);
Run Code Online (Sandbox Code Playgroud)

传递null格式提供程序将默认DateTimeFormatInfo.CurrentInfo为安全,但您可能希望使用不变文化:

DateTime date31 = DateTime.ParseExact(strOC31date, "yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
Run Code Online (Sandbox Code Playgroud)

然后你的代码将工作.