为什么DateTime.ToString(“ dd / MM / yyyy”)给我dd-MM-yyyy?


155

我希望将日期时间转换为格式为“ dd / MM / yyyy”的字符串

每当我使用进行转换时DateTime.ToString("dd/MM/yyyy"),我都会得到dd-MM-yyyy

我必须设置某种文化信息吗?


做DateTime.ToString(“ dd / MM / yyyy”);
jimplode

2
我这样做了,它没有用,问题不是日期,是“-”,我希望它是我指定的“ /”
Diskdrive

7
使用MM而不是mm-mm代表分钟而不是几个月。
Lloyd Powell


对则DateTime.ToString MSDN文档是绝望错误的:“ 例如,‘MM / DD / yyyyHH:MM’格式字符串显示的日期和时间串中的固定格式...格式字符串用‘/’作为固定日期分隔符,而不考虑特定于文化的设置。
Panic Panic 2016年

Answers:


243

斜杠是日期分隔符,因此将使用当前的区域性日期分隔符。

如果您想对其进行硬编码以始终使用斜杠,则可以执行以下操作:

DateTime.ToString("dd'/'MM'/'yyyy")

2
@spender-在某些文化中是。
丹尼尔·A·怀特

谢谢你迅速回应。你是对的。我会给您正确的答案
Diskdrive

6
您也可以使用以下格式:dateTime.ToString(@“ yyyy \ / MM \ / dd”)
base2 2012年


2
使用反斜杠转义格式字符串也可以:DateTime.Now.ToString(“ dd \\ / MM \\ / yyyy”);
TomB

61

传递CultureInfo.InvariantCulture作为DateTime的第二个参数,它将返回您想要的字符串,即使是非常特殊的格式:

DateTime.Now.ToString("dd|MM|yyyy", CultureInfo.InvariantCulture)

将会返回:28 | 02 | 2014


此代码比接受的答案中的代码更清晰(我的意思是添加CultureInfo)。它看起来至少比用撇号转义斜线更好。
谢尔盖(Sergey)

2
绝对比使用转义字符更容易阅读。我不知道我的日期格式会一直被覆盖,这让我有些震惊!
野人

10

添加CultureInfo.InvariantCulture为参数:

using System.Globalization;

...

var dateTime = new DateTime(2016,8,16);
dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

将返回:

"16/08/2016"

如果开发人员对某些字母(例如M m ss等)使用tostring方法,则您的解决方案将获得错误的结果,例如Datetime.Now.ToString(“ yyyy / dd / mm / Month”,CultureInfo.InvariantCulture)将不会生成2017/01 2月2日,结果为2017年1月2日2月
Okan SARICA

@OkanSARICA如果要在日期后加上“ / Month”,则应在ToString方法之后执行。DateTime.Now.ToString(“ yyyy / MM / dd”,CultureInfo.InvariantCulture)+“ / Month”;
Mikael Engver


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.