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

时间:2013-04-05 15:20:57

标签: c#

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

我有以下代码:

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小时制版本?

4 个答案:

答案 0 :(得分:36)

  

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

因为你要求它。这就是hh的含义。 HH是24小时。

如有疑问,请阅读custom date and time format strings上的文档。

hh记录为

  

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

HH记录为:

  

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

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

  

我可以看到DateTime?变量“dateSent”有一个24小时制的时间戳,例如14:50:34

DateTime不具有格式。这只是一个日期和时间。正如值{16}的int是“0x10”和“16”,具体取决于您如何格式化,DateTime也是如此。没有任何格式可以使用该值 - 仅调用ToString()的结果将取决于文化设置。

答案 1 :(得分:10)

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

HH:mm:ss

Here is a decent link to string formating date times

来自文章:

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

答案 2 :(得分:5)

使用大写字母表示小时:

HH:mm:ss
^^

答案 3 :(得分:4)

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

HH:mm:ss

希望有所帮助