23

An extension of this question, I am pulling a date from a database and displaying it in a grid.

I have the following code:

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);

When I add a breakpoint at the end of this block of code, I can see that the DateTime? variable "dateSent" has a 24-hour clock timestamp eg 14:50:34. However, when I check the value of the string variable "date" - it has a 12-hour clock format eg 02:50:34.

It is not my intention to convert to a 12 hour clock format. I have two questions:

  1. Why is dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") returning a 12 hour clock timestamp?
  2. How can I avoid this and use the 24-hour clock version?
Community
  • 1
  • 1
Mike Baxter
  • 6,868
  • 17
  • 67
  • 115
  • Take a look at [Custom Date and Time Format Strings](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx) – Zbigniew Apr 05 '13 at 15:23

4 Answers4

48

Why is dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") returning a 12 hour clock timestamp?

Because you're asking for it. That's what hh means. HH is 24-hour.

When in doubt, read the documentation on custom date and time format strings.

hh is documented as

The hour, using a 12-hour clock from 01 to 12."

HH is documented as:

The hour, using a 24-hour clock from 00 to 23.

As a further note, this comment suggests a potential conceptual error:

I can see that the DateTime? variable "dateSent" has a 24-hour clock timestamp eg 14:50:34

A DateTime value doesn't have a format. It's just a date and time. Just as an int with a value of sixteen is both "0x10" and "16" depending on how you format it, the same is true for DateTime. There's no format which goes around with the value - the results of just calling ToString() will depend on the culture settings.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
  • 1
    @Teifi: See my edit for something else important to note - you should differentiate between the values and any textual representations of them. – Jon Skeet Apr 05 '13 at 15:28
11

It should be as simple as capitalizing your h's

HH:mm:ss

Here is a decent link to string formating date times

From the article:

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

Notice that the hour is 16

String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
Justin Pihony
  • 66,056
  • 18
  • 147
  • 180
6

Use capital letters for the Hours:

HH:mm:ss
^^
Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
5

If you want to display a 24-hours string use the following format string:

HH:mm:ss

Hope it helps

Daniel Peñalba
  • 30,507
  • 32
  • 137
  • 219