2009-08-20 14 views
6

kiedy otrzymam obiekt DateTime.Hour, zawsze otrzymuję 24-godzinny czas (więc 6PM dałoby mi 18).jak uzyskać datę 12 godzin od DateTime

jak mogę uzyskać „12 godziny” czas więc godzina osiemnasta po prostu daje mi 6.

i oczywiście może zrobić to sam sprawdzić, ale zakładam, że nie ma wbudowaną funkcję do tego.

+0

można po prostu zapytać go, czy masz na myśli DateTim * e *? –

+0

Jeśli jednak to robisz, jak możesz porównać godziny poranne i nocne? – ThePower

+0

Nie potrzebuję tej kontroli. . . ponieważ istnieją oddzielne pola tekstowe dla "Godzina" "Min" "AM/PM". Mam zamiar przenieść to do kontrolki kalendarza, aby było prostsze, ponieważ to wszystko jest dziedziczony kod – leora

Odpowiedz

15

Jak o:

DateTime.Hour % 12 

To da 0-11 oczywiście ... chcesz 1-12? Jeśli tak, to:

((DateTime.Hour + 11) % 12) + 1 

Nie myśleć tam coś prostsze wybudowany w ...

1

Nie ma wbudowanej funkcji, głównie dlatego, że nie powinno to potrzebne:

  • Jeśli robisz to dla użytkownika, spójrz na użycie ciągu formatu.
  • Jeśli robisz to dla obliczenia, możesz odjąć czasy danych lub bezpośrednio dodać czas.

Poza tym obliczenia matematyczne są dość proste i już dostępne w innych odpowiedziach tutaj.

+0

Robię porównania godzin w porównaniu do liczby całkowitej otrzymuję z innego źródła danych (co oczywiście pojawia się tylko w czasie 12 godzin) – leora

+1

Nie należy konwertować tego innego źródła na datetime? Ślepe porównywanie 12 godzin jest niebezpieczne. –

5

DateTime.Now.ToString ("hh"); -> Korzystając z tego, otrzymasz "06" przez 18h.

3

Nie znam żadnej wbudowanej metody, ale zawsze można dodać metodę rozszerzenia, aby to osiągnąć.

Oczywiście zawsze można zastąpić kod sposobem, w jaki chcesz go wykonać.

public static class Extension 
{ 
    public static int GetTwelveCycleHour(this DateTime dateTime) 
    { 
     if (dateTime.Hour > 12) 
     { 
      return dateTime.Hour - 12; 
     } 

     return dateTime.Hour; 
    } 
} 
+2

Godzina% 12 jest prostsza –

+0

Uświadomiłem sobie, że po opublikowaniu odpowiedzi, dodałem komentarz "Oczywiście, zawsze możesz zastąpić kod sposobem, w jaki chcesz go osiągnąć." Moim głównym punktem było to, że to pytanie brzmi jak dobry kandydat na metodę rozszerzenia. –

+0

Nie chciałem po prostu zedrzeć odpowiedzi Jona Skeeta na moje własne, więc dodałem tylko komentarz i nie zmieniłem kodu. –

2

co po prostu:

public static int GetTwelveCycleHour(this DateTime dateTime) 
{ 
    return Convert.ToInt32(dateTime.ToString("h")); 
} 
+1

Formatowanie i parsowanie? To wystarczy, ale niepotrzebnie marnuje cykle procesora. Zapisz formatowanie wyświetlania wyników i parsowanie w celu obsługi wprowadzania danych przez użytkownika. Znacznie lepiej dla ciebie, gdy znajdziesz odpowiedź Jona Skeeta. – MCattle

+1

Nie jestem pewien co do wersji C#, której używasz, ale w C# 5 powoduje to niepoprawny wyjątek formatu. powinien to być ToString ("% h"); –

+1

@BenPretorius Masz rację. – Eternal21

Powiązane problemy