DateTime.Value.ToString(格式)给了我12小时的时钟

这个问题的扩展,我从数据库中提取日期并将其显示在网格中。

我有以下代码:

string date = ""; DateTime? dateSent; if (row["DateSent"] != DBNull.Value) dateSent = (DateTime)row["DateSent"]; else dateSent = null; date = (dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : null); 

当我在这段代码的末尾添加一个断点时,我可以看到DateTime? 变量“dateSent”具有24小时制时钟,例如14:50:34。 但是,当我检查string变量“date”的值时 – 它有一个12小时的时钟格式,例如02:50:34。

我不打算转换成12小时时钟格式。 我有两个问题:

  1. 为什么dateSent.Value.ToString(“dd / MM / yyyy hh:mm:ss”)返回12小时时钟戳?
  2. 如何避免这种情况并使用24小时制版本?

为什么dateSent.Value.ToString(“dd / MM / yyyy hh:mm:ss”)返回12小时时钟戳?

因为你要求它。 那就是那个意味着什么。 HH是24小时。

如有疑问,请阅读有关自定义日期和时间格式字符串的文档。

hh记录为

小时,从01到12使用12小时制。“

HH记录为:

小时,使用00至23的24小时制。

作为进一步说明,此评论表明潜在的概念错误:

我可以看到DateTime? 变量“dateSent”具有24小时制时钟,例如14:50:34

DateTime值没有格式。 这只是一个日期和时间。 正如值为16的int是“0x10”和“16”,具体取决于您如何格式化, DateTime也是如此。 没有与该值相关的格式 – 仅调用ToString()的结果将取决于文化设置。

它应该像大写你的h一样简单

 HH:mm:ss 

这是字符串格式化日期时间的一个不错的链接

来自文章:

 DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); 

请注意,小时是16

 String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24 

使用大写字母表示小时:

 HH:mm:ss ^^ 

如果要显示24小时字符串,请使用以下格式字符串 :

 HH:mm:ss 

希望能帮助到你