2013-04-05 15 views
14

Przedłużenie pytania this, wyciągam datę z bazy danych i wyświetlam ją w siatce.DateTime.Value.ToString (format) daje mi 12 godzinny zegar

Mam następujący kod:

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

Kiedy dodać punkt przerwania na końcu tego bloku kodu, widzę, że DateTime? zmienna „dateSent” ma 24-godzinny zegar datownika np 14 : 50: 34. Jednak gdy sprawdzam wartość zmiennej "date" string - ma ona 12-godzinny format zegara np. 02:50:34.

Nie jest moim zamiarem przekształcenie w 12-godzinny format zegara. Mam dwa pytania:

  1. Dlaczego dateSent.Value.ToString ("dd/mm/rrrr hh: mm: ss") Zwracanie 12 godzinnym znacznik czasu?
  2. Jak mogę tego uniknąć i korzystać z 24-godzinnej wersji zegara?
+0

Spójrz na [Custom Data i Łańcuchy formatu czasu] (http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx) – Zbigniew

Odpowiedz

32

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

Ponieważ pytasz o to. To oznacza hh. HH jest 24-godzinny.

W razie wątpliwości przeczytaj dokumentację na stronie custom date and time format strings.

hh jest udokumentowana jako

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

HH jest udokumentowane jako:

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

Jako kolejny uwaga, ten komentarz sugeruje potencjalny błąd koncepcyjny:

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

Wartość DateTime nie ma wartości ave a format. To tylko data i czas. Tak jak int o wartości szesnastu to "0x10" i "16" w zależności od sposobu formatowania, to samo dotyczy DateTime. Nie ma formatu, który pasuje do wartości - wyniki tylko połączenia ToString() zależą od ustawień kultury.

+1

@Teifi: Zobacz moją edycję dla czegoś innego ważnego do zapamiętania - powinieneś rozróżnić wartości i wszelkie reprezentacje tekstowe im. –

+0

Dzięki za przypomnienie mi o tym! –

5

używaj wielkich liter w godzinach:

HH:mm:ss 
^^ 
+2

Dzięki Robert, niestety nie mogę oznaczyć każdej odpowiedzi jako zaakceptowanej, mimo że wszystkie są świetne. +1 –

10

To powinno być tak proste, jak czerpanie Twój h na

HH:mm:ss 

Here is a decent link to string formating date times

Z artykułu:

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

Zauważ, że godzina ma 16

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

Dziękuję bardzo. Cholera, chciałbym móc przyjąć wiele odpowiedzi. –

4

Jeśli chcesz wyświetlić użyciu 24-godziny ciąg następujących format string:

HH:mm:ss 

Nadzieja pomaga

Powiązane problemy