日期时间到字符串:不同的行为取决于转换后的日期时间

Datetime to string: differents behavior depending on the converted datetime

我使用此 C# 代码将日期时间转换为字符串:

MyDatetime.ToString("dd/MM/yyyy HH:mm")

它有效,但不是每次都有效。我是什么意思?

例如,如果输入的日期时间是 2016-10-19 17:27:41.727,我会得到预期的字符串 19/10/2016 17:27。如果日期时间中的日期(and/or 月份)只有一位数字,我会得到一些奇怪的东西。

如果输入是2016-01-07 14:58:13.560,我得到1/7/2016,如果是2016-10-26 17:14:16.000,我得到10/6/2016

你知道为什么吗?我怎样才能始终只用一位数字设置几天和几个月的前导零?此外,为什么我在示例中没有看到日期中的时间部分?

更新

来自 SQL 服务器数据库(这是 SQL Server Management Studio)的一些日期时间字段。

当您将日期输入为 "XXXX-XX-XX" 时,它假定您使用的格式是 "YYYY-MM-DD".

只要看看你的输入输出,你就可以看到模式。 很多编程人员(和我一起工作)都使用这种格式,因为它是自动过滤的,没有任何标点符号(20170102 总是在 20161231 之后,等等)。

很可能你的 DateTime 已经有无效值(日期和月份混合)

new DateTime(2016, 01,  07,14,58,13,56).ToString("dd/MM/yyyy HH:mm")

returns 07-01-2016 14:58.

看看你是如何从数据库中读取这个 DateTime 值的。我相信问题就在那里。 (例如 SqlDataReader.GetDateTime

DateTime 方法与计算机语言结合使用。如果您的计算机(或服务器)是英文的(反之亦然)并且您传递美国非标准日期格式,您将遇到这样的问题。 如果您使用的是 Web 应用程序,请在 web.config

中配置正确的语言