20

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

我有以下代码:

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变量“日期”的值时 - 它具有 12 小时制格式,例如 02:50:34。

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

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

4 回答 4

45

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

因为你要求它。就是这个hh意思。HH是 24 小时。

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

hh记录为

小时,使用从 01 到 12 的 12 小时制。”

HH记录为:

小时,使用从 00 到 23 的 24 小时制。

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

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

DateTime没有格式。这只是一个日期和时间。正如int值 16 的 an 既是“0x10”又是“16”,具体取决于您的格式化方式,对于DateTime. 没有与值相关的格式 - 仅调用的结果ToString()将取决于文化设置。

于 2013-04-05T15:22:25.237 回答
11

它应该像大写你的 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
于 2013-04-05T15:22:31.143 回答
6

小时使用大写字母:

HH:mm:ss
^^
于 2013-04-05T15:22:26.533 回答
5

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

HH:mm:ss

希望能帮助到你

于 2013-04-05T15:23:13.130 回答