Lokale Zeitzone ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Lokale Zeitzone ermitteln

    Hi,

    Uhrzeiten werden mit Zeitzone angegeben. Die Zeitzone gibt die Verschiebung in Stunden und Minuten gegen die UTC (Greenwich Mean Time) an. Auf unserem Längengrad ist das +01:00 im Winter und +02:00 im Sommer (Sommerzeit).

    Ich möchte nun die aktuelle Zeitzone ermittlen.

    Da gibt es die Klasse TimeZone mit der Property .CurrentTimeZone

    Damit kann ich zwar ermitteln, wie groß die Verschiebung der aktuellen Uhrzeit gegen UTC ist und ob wir gerade Sommer oder Winterzeit haben. Und daraus kann ich dann die aktuelle Zeitzone ermitteln ... aber das scheint mir ganz schön umständlich zu sein. Natürlich kann ich das vereinfachen: wenn ich weiß, dass ich hier in Alemania bin, setze ich die Zeitzone auf +01:00 wenn keine Sommerzeit anliegt und auf +02:00 wenn Sommerzeit ist.

    VB.NET-Quellcode

    1. txtBufferZone.Text = "+01:00"
    2. If TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) Then txtBufferZone.Text = "+02:00"


    Aber das ist natürlich "schweinisch", weil es woanders auf der Welt nicht mehr funktioniert. :)

    Gibt es denn keinen einfachen ALLGEMEINGÜLTIGEN Weg, um die lokale Zeitzone eines Rechners herauszufinden?

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Stehen noch nicht genügend Infos in TimeZoneInfo.Local drin? Wenn nicht, was fehlt Dir genau? Ich werd aus dem Post nicht ganz schlau.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe mir schon die verfügbaren Eigenschaften angeschaut:

    VB.NET-Quellcode

    1. Debug.Print("Id : " & TimeZoneInfo.Local.Id)
    2. Debug.Print("StandardName : " & TimeZoneInfo.Local.StandardName)
    3. Debug.Print("BaseUtcOffset : " & TimeZoneInfo.Local.BaseUtcOffset.ToString)
    4. Debug.Print("DaylightName : " & TimeZoneInfo.Local.DaylightName)
    5. Debug.Print("DisplayName : " & TimeZoneInfo.Local.DisplayName)
    6. Debug.Print("GetSystemTimeZones : " & TimeZoneInfo.GetSystemTimeZones.ToString)


    Quellcode

    1. Id : W. Europe Standard Time
    2. StandardName : W. Europe Standard Time
    3. BaseUtcOffset : 01:00:00
    4. DaylightName : W. Europe Daylight Time
    5. DisplayName : (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
    6. GetSystemTimeZones : System.Collections.ObjectModel.ReadOnlyCollection`1[System.TimeZoneInfo]


    Da könnte man etwa aus dem BaseUtcOffset die Distanz +01:00 erhalten und dann mit der Abfrage

    VB.NET-Quellcode

    1. If TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) Then ...


    noch eine Stunde draufkloppen, um die richtige Distanz +02:00 zu erhalten.

    Aber das scheint mir viel zu kompliziert zu sein ! Gib es da nix einfacheres ?

    LG
    Peter
    Beim Experimentieren mit dem Vorschlag von EDR hab ich jetzt eine einfache Lösung gefunden:

    VB.NET-Quellcode

    1. Dim currentTime As DateTime = Date.Now
    2. Dim currentZone As String = currentTime.ToString("zzz")
    3. Debug.Print("currentZone : " & currentZone)


    currentZone : +02:00

    Soweit war ich eigentlich schon mal ... aber ich hab da wohl irgend einen anderen Fehler gemacht.

    Wie auch immer, so funktioniert das ...

    Herzlichen Dank für eure Ratschläge! Ihr habt mir sehr geholfen!

    LG
    Peter

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Peter329“ ()

    Ich weiß, ich bin Spielverderber, weil es viel besser ist, Rätsel selber zu lösen, aber:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim OnlyHoursOfDifferenceToUTC = DateTimeOffset.Now.Offset.Hours



    EDIT: Ah, EdR war eh schneller.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.