10 Stimmen

Typ zum Speichern der Zeit in C# und entsprechender Typ in T-SQL

Ich würde gerne wissen, wie man Speicherzeit in C# und T-SQL . Ich weiß, dass sie beide eine DateTime Typ, aber ich muss nur eine Zeit . Zum Beispiel:

var startTime = 9PM;
var endTime = 10PM;

Und dann speichern/zurückholen diese Werte aus einer Datenbank. Vielen Dank im Voraus.

Francesco

10voto

Heinzi Punkte 157917

C#

Ob Sie eine DateTime o TimeSpan Typ in C# zum Speichern 9 PM ist eine Frage des Geschmacks. Ich persönlich würde Folgendes verwenden DateTime und lassen die Datumskomponente leer, da dies semantisch näher an dem ist, was Sie wollen. (A TimeSpan ist ausgelegt für Zeitintervalle (z. B. "21 Stunden").

Die Dokumentation unterstützt beide Optionen. Dies ist von die Dokumentation von TimeSpan :

Die TimeSpan-Struktur kann auch zur Darstellung der Tageszeit verwendet werden, allerdings nur, wenn die Zeit nicht mit einem bestimmten Datum verbunden ist.

Auf der anderen Seite, der MSDN Artikel Auswählen zwischen DateTime, DateTimeOffset und TimeZoneInfo erwähnt das Folgende:

Die DateTime-Struktur ist für Anwendungen geeignet, die Folgendes tun:
* Arbeitet nur mit Daten.
* Nur mit Zeiten arbeiten.
[...]


T-SQL

SQL Server hat eine time Datentyp.

2voto

Yuck Punkte 46967

In C# gibt es keinen Typ, der nur eine Zeit enthält. Es gibt TimeSpan aber es ist dazu gedacht, einen Zeitraum zu halten und nicht wirklich ein Bestandteil einer DateTime (d.h. nur Stunden und Minuten).

Ab SQL Server 2008 gibt es eine time Typ ( Verwendung von Datums- und Zeitdaten ), dass tut nur eine Zeitkomponente speichern.

EDIT: Ich habe Ihre Frage zunächst falsch verstanden. TimeSpan ist genau das, wonach Sie suchen, und es kann in einem time Typ mit SQL 2K8.

1voto

Dan Diplo Punkte 24765

In C# würden Sie wahrscheinlich eine Zeitspanne Struktur, wenn Sie nur eine Zeit speichern wollten Intervall . Sie scheinen jedoch eine Anfangs- und eine Endzeit speichern zu wollen, was die Speicherung von zwei Werten erfordern würde. Sie könnten daher zwei TimeSpans (z. B. basierend auf der Anzahl der Minuten ab Mitternacht, um die Zeit darzustellen) oder Sie könnten einfach zwei DateTime Werte und werfen die Datumskomponente weg.

Wie bereits erwähnt, hat SQL Server 2008 eine Zeit Datentyp, aber dies ist in früheren Versionen nicht verfügbar, die nur DateTime . Sie könnten auch einfach eine Int die die Anzahl der Minuten nach Mitternacht darstellt, die leicht in eine TimeSpan ( TimeSpan interval = TimeSpan.FromMinutes(60) ).

1voto

Ben Robinson Punkte 21311

Timespan in c# ist, wie Sie manipulieren Zeitintervalle. Im Gegensatz zu dem, was andere Poster sagen, glaube ich nicht, dass der Datentyp Time für die Speicherung von Zeitintervallen in SQL geeignet ist, es sei denn, Sie wollen tatsächlich die Start- und Endzeit und nicht das Zeitintervall (d.h. 1 Stunde in Ihrem Beispiel) speichern. Er ist für die Speicherung einer Tageszeit gedacht, ähnlich wie ein DateTime, aber ohne Datum. Wenn ich ein Zeitintervall in SQL speichern möchte, verwende ich einfach einen int und gebe ihm eine Zeiteinheit, die für die jeweilige Aufgabe geeignet ist (z. B. Minuten, Sekunden, Millisekunden usw.).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X