2

我希望根据当前的文化为我的 DateTime 设置一个特定的格式。

所以我试试这个:

dateTime.ToString("dd/MM/yyyy hh:mm");

这部分没问题, / 被文化特定的分隔符替换。但是根据文化,日期和月份的顺序不会切换(如 MM/dd)。

使用.ToString("g")有效,但这不包括前导零。

我该如何做到这一点?

4

6 回答 6

11

我认为这会做你想要的:

System.Globalization.DateTimeFormatInfo format =
    System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
string dateTime = DateTime.Now.ToString(format.FullDateTimePattern);

编辑:

您可以在较短的日期/时间执行以下操作:

    System.Globalization.DateTimeFormatInfo format =
         System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
    string dateTime = DateTime.Now.ToString(format.ShortDatePattern + " " + 
         format.ShortTimePattern);
于 2009-10-08T15:28:41.470 回答
4

您可能会在标准日期和时间格式字符串文档页面中找到所需的格式,而不是使用“g”。

编辑:看起来您可能想要CultureInfo.DateTimeFormat.ShortDatePattern,但无论如何都要检查选项。

于 2009-10-08T15:27:21.613 回答
2

/字符是一个占位符,将被当前区域性的日期分隔字符替换。如果您希望“硬编码”要使用的格式,/您需要像这样更改格式字符串:

dateTime.ToString("dd'/'MM'/'yyyy hh':'mm");
于 2009-10-08T15:36:48.520 回答
1

您确实想使用“g”,但是前导零取决于文化。Invariant 文化和其他一些文化将包括前导零,但其他文化不会。

您想保持领先的零有什么特别的原因吗?

于 2009-10-08T15:34:47.853 回答
1

尝试这个:

var cinf = CultureInfo.CurrentCulture.DateTimeFormat.DateSeparator;

DateTime.Now.ToString("dd/MM/yyyy hh:mm").Replace(cinf,"/");
于 2009-10-08T15:38:54.477 回答
0

如果您对标准模式不满意,可以像这样编辑它们:

DateTimeFormatInfo format = (DateTimeFormatInfo) CultureInfo.CurrentCulture.DateTimeFormat.Clone();
format.ShortTimePattern = "hh:mm"; // example only
string result = value.ToString("g", format);
于 2009-10-08T15:33:26.827 回答