日期格式化yyyymmdd到yyyy-mm-dd

我正在尝试使用以下代码将yyyymmdd格式的日期转换为yyyy-mm-dd:

tdrDate = DateTime.ParseExact(dateString, "yyyymmdd", null).ToString("yyyy-MM-dd"); 

这项工作唯一的问题是,当我有一个像这个“ 20070205 ”这样的日期时,我会回来“ 2007-01-05 ”。 我不知道为什么会这样,任何帮助都表示赞赏。

 tdrDate = DateTime.ParseExact(dateString, "yyyyMMdd", null).ToString("yyyy-MM-dd"); 

你需要MM,而不是mm。 毫米是几分钟。

它应该是:

 DateTime.ParseExact(dateString, "yyyyMMdd", null).ToString("yyyy-MM-dd"); 

第一个日期格式字符串中的大写’MM’。

"yyyymmdd"必须是"yyyyMMdd"

毫米几分钟

格式字符串区分大小写,因此“mm”与“MM”不同。 您正在解析分钟 (“mm”),这就是为什么月份(“MM”)的值始终为默认值1的原因。

试试这个 :

 tdrDate = DateTime.ParseExact(dateString, "yyyyMMdd", null).ToString("yyyy-MM-dd"); 

使用MM代替mm,mm代表分钟,MM代表月份,这就是它采用01(默认值为MM)的原因。

试试这个:DateTime.ParseExact(“20070205”,“yyyyMMdd”,null).ToString(“yyyy-MM-dd”)

免责声明我对C#的日期格式一无所知。

但我猜测问题是你在第一个格式字符串中使用了mm ,在第二个格式中使用了MM

一个方便的参考: SteveX编译:C#中的字符串格式

在这里,您要解析日期以创建日期对象,将日期对象格式化为字符串,以及丢弃日期对象。 这听起来比简单的字符串处理更多:

 tdrDate = dateString.Substring(0,4) + '-' + dateString.Substring(4,2) + '-' + dateString.Substring(6,2); 

除非你需要由DateTime.ParseExact()执行的validation,如果给定一个无效的日期,它将抛出System.FormatException ,我可能只是使用字符串格式化方法。