Laden...

DateTime.Parse mit Zeitzone

Erstellt von 11.08.2006 vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.466 Views
1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren
DateTime.Parse mit Zeitzone

Ich habe den String "Tue, 04 Mar 2008 07:06:00 +0000", aus einem RSS-Feed extrahiert und lasse ihn per DateTime.Parse("Tue, 04 Mar 2008 07:06:00 +0000") als DateTime-Typ konvertieren.

Dort kommt aber als Ergebnis eine Stunde zu viel raus. Also 04.03.08 08:06:00.

Weshalb? Hätte am String-Ende der 0000-Wert einen anderen Eintrag gehabt, hätte ich das nachvollziehen können, aber so?

S
1.047 Beiträge seit 2005
vor 16 Jahren

Dort kommt aber als Ergebnis eine Stunde zu viel raus. Also 04.03.08 08:06:00. und welche zeitzone is das?
ich vermute einfach mal das tostring standardmäßig die lokalen einstellungen benutzt und dir das ding in gmt +1 anzeigt, weshalb du ne stunde zusätzlich bekommst

1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Über die Zeitzone weis ich nichts, es kann zum Beispiel ein Japanischer Feed sein.

Ich vermute auch, dass .Net bei fehlenden Angaben von GMT+1 ausgeht.

B
196 Beiträge seit 2007
vor 16 Jahren

sheitman hat recht
bei der "+0000" handelt es sich um eine Zeitzonenagabe

"Tue, 04 Mar 2008 07:06:00 +0000" währe Zeitzone +0
und da wir +1Stunde haben wird dir automatisch eine stunde draufgerechnet
(es wird automatisch in die Zeitzone des Computers umgerechnet)

"Tue, 04 Mar 2008 07:06:00 +0000" entspricht "Tue, 04 Mar 2008 08:06:00 +0001"(unsere Zeitzone)

Edit:
kleiner Fehler :
unsere zeitzone ist nicht +0001 sondern +1 oder +100 oder +0100
+0001 würde eine zeitverschiebung von 1 minute entsprechen

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

OK - gibt es denn die Möglichkeit mir direkt die Zeitzone auszugeben? Also zum Beispiel: bei +0001 --> Berlin, Paris, etc.

Oder muss man das selbst implementieren?

S
1.047 Beiträge seit 2005
vor 16 Jahren

benutzt mal ToUniversalTime()

Console.WriteLine(d.ToUniversalTime().ToString("R"));

hats bei mir wieder richtig ausgegeben

hier auch mal nen blogeintrag der sich mit dem thema beschäftigt =)
http://blogs.technolog.nl/eprogrammer/archive/2006/05/14/476.aspx

1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren
Zeitzone aus Zeitstring gewinnen

Ich habe einen Zeitstring wie z.B. 'Tue, 04 Mar 2008 07:06:00 +0000' und möchte nun dafür die Zeitzone ausgegeben haben.

Mit DateTime.Parse(Tue, 04 Mar 2008 07:06:00 +0000) wird die Zeit auch erkannt und in Abhängigkeit meiner Rechnereinstellungen auch in dessen Zeit umgeformt. Daher denke ich, dass .Net eigentlich schon mit den Zeitzonen umgehen kann.

Wie suche nun eine Funktion wie

GetTimeZoneFromTimeString("Tue, 04 Mar 2008 07:06:00 +0000")

die mir dann --> London zurück gibt. Wie geht das in .Net (C#)? Oder muss man das selbst implementieren?

B
196 Beiträge seit 2007
vor 16 Jahren

Du hast die Zeitzone doch in deinem String drinne
"Tue, 04 Mar 2008 07:06:00 +0000"
daraus kann man mögliche Standpunkte errechnen

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Ja genau, das ist mir bewusst. Und ich suche genau nach der Möglichkeit mir aus 0000 London, oder was auch immer ausgeben zu lassen.

B
196 Beiträge seit 2007
vor 16 Jahren

Da ist mir keine Funktion bekannt.
Und einen genauen Ort wirst du eh nie angeben können da für jede Zeitverschiebung mehrere Orte in Frage kommen.
Die Zeitverschiebung ist zwar relativ genau angegeben (z.B. +1234 für 12 stunden und 34 minuten) gibt es immer mehrere mögliche Orte.

Was du selbst machen könntest wäre dir eine Klasse zu schreiben die dir je nach Zeitverschieben einen dieser möglichen Orte oder den Namen der zeitzone oder sonst was ausgibt.

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

S
1.047 Beiträge seit 2005
vor 16 Jahren

Schau mal ob dir die Klassen TimeZone oder TimeZoneInfo weiterhelfen.

1
11.08.2006 Themenstarter:in
310 Beiträge seit 2006
vor 16 Jahren

Die habe ich schon durch und bin daher etwas verwundert, dass ich da nichts gefunden habe.

Aber ist ja auch kein Problem eine Methode mit 24 switch-statements zu schreiben. Die repräsentierenden Städte stehen schön in der Windows-Zeitanzeige.

F
21 Beiträge seit 2008
vor 16 Jahren

TimeZoneInfo hat eine statische Methode GetSystemTimeZones(), die dir eine Collection von TimeZoneInfo-Objekten liefert. Über den BaseUtcOffset bekommst du den Offset zur UTC, musst dir halt eine passende raussuchen. In DisplayName stehen dann die Städte, in StandardName sowas wie " Malaysische Halbinsel Normalzeit".

Gruß, frank#