Wie andere gesagt haben, Sie können ein verwenden DateTime
und ignorieren Sie das Datum oder ein verwenden TimeSpan
. Persönlich bin ich an keiner dieser Lösungen interessiert, da keiner der beiden Typen wirklich das Konzept widerspiegelt, das Sie darstellen möchten. Ich betrachte die Datums- / Zeittypen in .NET als etwas spärlich, was einer der Gründe ist, warum ich angefangen habe Noda Zeit . In Noda Time können Sie den LocalTime
Typ verwenden, um eine Tageszeit darzustellen.
Eine Sache zu beachten: Die Tageszeit ist nicht unbedingt die Zeitspanne seit Mitternacht am selben Tag ...
(Abgesehen davon, wenn Sie auch eine Schließzeit eines Shops darstellen möchten, möchten Sie möglicherweise 24:00 Uhr darstellen, dh die Uhrzeit am Ende des Tages. Die meisten APIs für Datum und Uhrzeit - einschließlich Noda Zeit - Lassen Sie nicht zu, dass dies als Tageszeitwert dargestellt wird.)
Duration
in Noda Time oderTimeSpan
in der BCL. Ich würde wahrscheinlich den "Platz in Video + Kommentar" als Typ einkapseln und dann ein Array dieses Typs haben.Sie können die Zeitspanne verwenden
[Bearbeiten] In
Anbetracht der anderen Antworten und der Bearbeitung der Frage würde ich immer noch TimeSpan verwenden. Es macht keinen Sinn, eine neue Struktur zu erstellen, bei der eine vorhandene aus dem Framework ausreicht.
In diesen Zeilen würden Sie am Ende viele native Datentypen duplizieren.
quelle
TimeSpan
so etwas ist etwas hässlich. Es ist das Beste, was innerhalb des Frameworks selbst verfügbar ist, aber das ist nicht dasselbe wie zu sagen, dass es angenehm ist.Wenn Sie das
Date
wirklich stört, können Sie auch eine einfachereTime
Struktur erstellen :Oder warum sich die Mühe machen: Wenn Sie mit diesen Informationen keine Berechnung durchführen müssen, speichern Sie sie einfach als
String
.quelle
TimeSpan
, die dies bereits handhabt, und auf eine wesentlich bessere Weise.Ich sage, benutze eine DateTime. Wenn Sie den Datumsteil nicht benötigen, ignorieren Sie ihn einfach. Wenn Sie dem Benutzer nur die Uhrzeit anzeigen müssen, geben Sie sie wie folgt formatiert für den Benutzer aus:
Es scheint, als wäre die zusätzliche Arbeit, eine neue Klasse zu erstellen oder sogar einen TimeSpan zu verwenden, unnötig.
quelle
DateTime.Now.ToString("hh:mm:ss.fff");
Mikrosekunden:DateTime.Now.ToString("hh:mm:ss.ffffff");
Nanosekunden (wenn Datetime hat einmal so viel Auflösung):DateTime.Now.ToString("hh:mm:ss.fffffffff");
Wie pro MSDNIch denke, Rubens 'Klasse ist eine gute Idee, also dachte man daran, eine unveränderliche Stichprobe seiner Zeitklasse mit grundlegender Validierung zu machen.
quelle
Neben Chibueze Opata :
quelle
Hier ist eine TimeOfDay-Klasse mit vollem Funktionsumfang.
Dies ist in einfachen Fällen übertrieben, aber wenn Sie wie ich erweiterte Funktionen benötigen, kann dies hilfreich sein.
Es kann die Eckfälle, einige grundlegende Berechnungen, Vergleiche, die Interaktion mit DateTime, das Parsen usw. behandeln.
Unten finden Sie den Quellcode für die TimeOfDay-Klasse. Sie können Anwendungsbeispiele sehen und erfahren Sie mehr hier :
Diese Klasse verwendet DateTime für die meisten internen Berechnungen und Vergleiche, damit wir das gesamte bereits in DateTime eingebettete Wissen nutzen können.
quelle
Wenn Sie keine DateTime oder TimeSpan verwenden und nur die Uhrzeit speichern möchten, können Sie die Sekunden seit Mitternacht in einem Int32 oder (wenn Sie nicht einmal Sekunden möchten) die Minuten seit Mitternacht speichern würde in einen Int16 passen. Es wäre trivial, die wenigen Methoden zu schreiben, die erforderlich sind, um von einem solchen Wert aus auf Stunde, Minute und Sekunde zuzugreifen.
Der einzige Grund, warum ich DateTime / TimeSpan vermeiden kann, ist, wenn die Größe der Struktur kritisch ist.
(Wenn Sie ein einfaches Schema wie das oben beschriebene in einer Klasse verwenden, ist es natürlich auch trivial, den Speicher in Zukunft durch einen TimeSpan zu ersetzen, wenn Sie plötzlich feststellen, dass dies Ihnen einen Vorteil verschafft.)
quelle