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

Mik*_*ter 17 c#

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

我有以下代码:

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);
Run Code Online (Sandbox Code Playgroud)

当我在这段代码的末尾添加一个断点时,我可以看到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小时制版本?

Jon*_*eet 38

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

因为你要求它.这hh意味着什么.HH是24小时.

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

hh 记录为

小时,从01到12使用12小时制."

HH 记录为:

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

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

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

一个DateTime值不具有的格式.这只是一个日期和时间.就像int16的值是"0x10"和"16"一样,取决于你如何格式化,同样的情况也是如此DateTime.没有与该值相关的格式 - 仅调用的结果ToString()将取决于文化设置.


Jus*_*ony 11

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

HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

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

来自文章:

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); 
Run Code Online (Sandbox Code Playgroud)

请注意,小时是16

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


Rob*_*vey 6

使用大写字母表示小时:

HH:mm:ss
^^
Run Code Online (Sandbox Code Playgroud)

  • 谢谢罗伯特,不幸的是我无法将每个答案标记为已被接受,尽管它们都很棒.+1 (2认同)

Dan*_*lba 5

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

HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你