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?
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
Ü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.
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
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?
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
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?
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
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.
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
Schau mal ob dir die Klassen TimeZone oder TimeZoneInfo weiterhelfen.
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.
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#