Jak mówili inni, to może użyć DateTime
i ignorować datę, lub użyć TimeSpan
. Osobiście nie podoba mi się żadne z tych rozwiązań, ponieważ żaden typ nie odzwierciedla koncepcji, którą próbujesz przedstawić - uważam typy dat / godzin w .NET za nieco rzadkie, co jest jednym z powodów, dla których zacząłem Czas Noda . W Noda Time możesz użyć tego LocalTime
typu, aby reprezentować porę dnia.
Jedną rzecz do rozważenia: pora dnia niekoniecznie musi być długością od północy tego samego dnia ...
(Poza tym, jeśli chcesz również reprezentować godzinę zamknięcia sklepu, możesz uznać, że chcesz reprezentować 24:00, tj. Godzinę na koniec dnia. Większość interfejsów API daty / godziny - w tym Noda Czas - nie pozwól, aby było to przedstawiane jako wartość pory dnia).
Duration
w Noda Time lubTimeSpan
w BCL. Prawdopodobnie hermetyzuję „miejsce w filmie + komentarz” jako typ, a następnie mam tablicę tego typu.Możesz użyć przedziału czasu
[Edytuj]
Biorąc pod uwagę inne odpowiedzi i edycję pytania, nadal używałbym TimeSpan. Nie ma sensu tworzyć nowej struktury, w której wystarczy istniejąca struktura.
W tych liniach skończyłoby się duplikowaniem wielu rodzimych typów danych.
źródło
TimeSpan
jest nieco brzydkie. To najlepsze, co jest dostępne w ramach samego frameworka, ale to nie to samo, co mówienie, że jest przyjemne.Jeśli ta pustka
Date
naprawdę Cię popsuła, możesz także stworzyć prostsząTime
strukturę:Lub po co zawracać sobie głowę: jeśli nie musisz wykonywać żadnych obliczeń z tymi informacjami, po prostu zapisz je jako
String
.źródło
TimeSpan
, które już sobie z tym radzi, i to w znacznie lepszy sposób.Mówię: użyj DateTime. Jeśli nie potrzebujesz części z datą, po prostu ją zignoruj. Jeśli chcesz wyświetlić użytkownikowi tylko godzinę, wyślij go sformatowanemu użytkownikowi w następujący sposób:
Wydaje się, że cała dodatkowa praca związana z tworzeniem nowej klasy lub nawet korzystaniem z TimeSpan jest niepotrzebna.
źródło
DateTime.Now.ToString("hh:mm:ss.fff");
:DateTime.Now.ToString("hh:mm:ss.ffffff");
Nanosekundy (jeśli DateTime ma nawet taką rozdzielczość):DateTime.Now.ToString("hh:mm:ss.fffffffff");
Zgodnie z MSDNMyślę, że klasa Rubensa jest dobrym pomysłem, dlatego postanowiłem zrobić niezmienną próbkę jego klasy Time z podstawową walidacją.
źródło
Oprócz Chibueze Opata :
źródło
Oto w pełni funkcjonalna klasa TimeOfDay.
Jest to przesada w przypadku prostych przypadków, ale jeśli potrzebujesz bardziej zaawansowanych funkcji, takich jak ja, może to pomóc.
Może obsługiwać przypadki narożne, podstawowe matematyki, porównania, interakcję z DateTime, parsowanie itp.
Poniżej znajduje się kod źródłowy dla klasy TimeOfDay. Możesz zobaczyć przykłady użycia i dowiedzieć się więcej tutaj :
Ta klasa używa DateTime do większości swoich wewnętrznych obliczeń i porównań, dzięki czemu możemy wykorzystać całą wiedzę już osadzoną w DateTime.
źródło
Jeśli nie chcesz korzystać z funkcji DateTime lub TimeSpan, a po prostu chcesz zapisać porę dnia, możesz po prostu zapisać sekundy od północy w Int32 lub (jeśli nie chcesz sekund) minuty od północy zmieściłby się w Int16. Zapisanie kilku metod wymaganych do uzyskania dostępu do godziny, minuty i sekundy z takiej wartości byłoby trywialne.
Jedynym powodem, dla którego mogę pomyśleć o uniknięciu DateTime / TimeSpan, jest to, że rozmiar struktury jest krytyczny.
(Oczywiście, jeśli użyjesz prostego schematu, takiego jak powyższy, zawiniętego w klasę, w przypadku, gdyby nagle zdasz sobie sprawę, że to da ci przewagę, byłoby również banalne zastąpienie magazynu pamięcią TimeSpan)
źródło