.net 日期格式yyyymmdd到yyyy-mm-dd

7uhlpewt  于 2023-10-21  发布在  .NET
关注(0)|答案(9)|浏览(212)

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

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

这是可行的,唯一的问题是,当我有一个日期,如“20070205”我回来“2007-01-05"。我不知道为什么会这样,任何帮助都很感激。

wj8zmpe1

wj8zmpe11#

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

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

waxmsbnn

waxmsbnn2#

它应该是:

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

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

c8ib6hqw

c8ib6hqw3#

"yyyymmdd"必须是"yyyyMMdd"

mm分钟

efzxgjgh

efzxgjgh4#

试试这个:

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

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

vbkedwbf

vbkedwbf5#

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

aij0ehis

aij0ehis6#

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

vom3gejh

vom3gejh7#

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

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

tcbh2hod

tcbh2hod9#

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

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

如果你的目标是.Net 5或更高版本,你可以使用字符串插值:

tdrDate = $"{dateString.Substring(0,4)}-{dateString.Substring(4,2)}-{dateString.Substring(6,2)}";

队伍有点长。如果你的目标是.Net 7或更高版本,也许:

tdrDate = $"{
    dateString.Substring(0,4)
}-{
    dateString.Substring(4,2)
}-{
    dateString.Substring(6,2)
}";

我得承认,我还没有找到一种方法来将长插值字符串拆分成我真正喜欢的行。
除非您需要DateTime.ParseExact()执行的验证(如果给定无效日期,它将抛出System.FormatException),否则我可能只使用字符串格式化方法。

相关问题