Laden...

UTC-Zeit aus SQL in MEZ in c#

Erstellt von Thron vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.103 Views
T
Thron Themenstarter:in
63 Beiträge seit 2017
vor 6 Jahren
UTC-Zeit aus SQL in MEZ in c#

Hallo,

habe noch ein weiteres Problem bei dem ich ncht richtig weiß wie ich es sauber lösen kann.
Ich habe in einer DB GPS-Koordinaten darunter das Feld GPSZeit, darin steht der Wert

2017-14-06 19:30:21 --> (ist in UTC)

Wenn ich diesen nun mit einem SQL String per c# auslese z.B.

Select GPSZeit from tbl.GPSDaten;

Wie verarbeite ich diese Inforamtion weiter zu MEZ? Das Ergebnis ist ja kein DateTime Object somit kann ich ja nicht einfach die DateTime.ToLocalTime Methode nutzen oder liege ich da falsch?

Drehe mch irgendwie im Kreis.... 8o 8o

Kann mir jemand bitte helfen?

Viele Grüße

D
985 Beiträge seit 2014
vor 6 Jahren

Das Feld GPSZeit hat welchen Datentyp in der Datenbank?

T
2.219 Beiträge seit 2008
vor 6 Jahren

@Sir Rufo
Anderer Thread zu dem Thema:
UTC-Zeit aus SQL in MEZ in c#

Dürfte als DateTime sein.

@Thron
Du musst hier mit dem DataReader arbeiten, wenn du nur das Feld auslesen willst.

Link:
https://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqldatareader(v=vs.110).aspx


// Beispiel zum auslesen aller GPSZeit Einträge über SqlDataReader
using(SqlConnection conn = new SqlConnection(connectionString))
{
	conn.Open();
	
	using(SqlCommand cmd = new SqlCommand("Select GPSZeit from tbl.GPSDaten", conn))
	{
		using(SqlDataReader reader = cmd.ExecuteReader())
		{
			while(reader.Read())
			{
				DateTime utcZeit = Convert.ToDateTime(reade["GPSZeit"].ToString());
			}
		}
	}
}

Somit kannst du deine UTC Zeiten aus der DB auslesen als DateTime und musst dann nur die Umwandlung per ToLocal Methode machen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

D
985 Beiträge seit 2014
vor 6 Jahren

Den Typ der Spalte kenne ich immer noch nicht. DateTime ist für mich ein .net Type.

~~Bei Convert.ToDateTime bekommt man idR einen DateTime Wert mit DateTimeKind.Unspecified. Wenn man diesen Wert dann mit DateTime.ToLocalTime ausliest erhält man exakt den gleichen Zeit-Wert.

Eine Möglichkeit wäre


DateTime utcZeit = Convert.ToDateTime(reader["GPSZeit"].ToString()).ToUniversalTime();

Dann klappt es auch mit ToLocalTime wie erwartet.~~

Auf diesen Quark falle ich immer wieder rein ... bei DateTimeKind.Unspecified wird bei ToLocalTime und ToUniversalTime immer umgerechnet.

T
Thron Themenstarter:in
63 Beiträge seit 2017
vor 6 Jahren

hallo,

leider hat es nicht geklappt. Ersagt mir falsches Format. Er erwartet dd/mm/jjjj. Zu allem Übel habe ich gesehen, dass die Zeit in der Tabelle so: 2017-06-13 17:23:12.000 gespeichert ist.

Kann mir nochmal wer helfen?

Und übrigens ist in der Sql das Feld von Typ datetime.

Danke

D
985 Beiträge seit 2014
vor 6 Jahren

Wenn der Feld-Typ wirklich datetime ist, dann ist 2017-06-13 17:23:12.000 nicht der gespeicherte Wert, sondern die Darstellung des gespeicherten Werts.

Der SqlReader sollte in dem Fall auch eine Instanz vom Typ SqlDateTime für dieses Feld zurückliefern und der hat eine Eigenschaft Value vom Typ DateTime.

T
2.219 Beiträge seit 2008
vor 6 Jahren

@Thron
Zeigt doch bitte mal deinen Code bei dem er aktuell scheitert.
Die "Fehlermeldung" passt nicht zu dem Code den ich dir gegeben habe.
Also zeig bitte mal deinen Code, wie du die Daten ausliest.

Zur Sicherheit schau auch bitte mal wie der Datentyp der Spalte in der Tabelle heißt.
Wenn dies nicht datetime sein sollte, worauf aktuell aber nichts schließen lässt, dann kann es auch zu einem richtigen Fehler kommen.
Hier wäre aber eine genauere Fehlermeldung, die du auch beim debuggen bekommst und kopieren kannst, hilfreicher.
Auch ein direkter Screenshot der Meldung wäre eine Möglichkeit.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
Thron Themenstarter:in
63 Beiträge seit 2017
vor 6 Jahren

hallo...

habe es hinbekommen. Es war so wie es Sir Rufo sagte, c# erkennt das Datum und wandelt es dann automatisch in die das europäische Format um.

Somit alles gelöst.....danke