vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Sommerzeit Test für bestimmte Zeitzone 
Autor: alexg
Datum: 28.04.22 19:44

Hallo,

ich würde gerne bestimmen ob sich ein bestimmtes Datetime-Objekt innerhalb einer ganz bestimmten TimeZone in der Sommerzeit befindet.

Mit der CurrentTimeZone kein Problem. Aber die bezieht sich ja eben auf das aktuelle System. Das ganze soll aber auf jedem System überall auf der Welt funktionieren.

Also sowas wie:

Public Function Sommerzeit(ByVal MeinDateTime as datetime) as Boolean

If MeinDateTime innerhalb der Sommerzeit von "Berlin"


End Function

Hat jemand eine gute Lösung?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sommerzeit Test für bestimmte Zeitzone 
Autor: Kuno60
Datum: 29.04.22 00:58

Zum Beispiel so:
  Function IstSommerzeit(zeit As Date, zone As TimeZoneInfo) As Boolean
    Return zone.IsDaylightSavingTime(zeit)
  End Function
Mit TimeZoneInfo.GetSystemTimeZones(), kannst du alle Zeitzonen abfragen.

Auswahl über eine ListBox:
' in Listbox eintragen:
ListBox1.Items.AddRange(TimeZoneInfo.GetSystemTimeZones.ToArray)
ListBox1.SelectedItem = TimeZoneInfo.Local
 
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) _
  Handles ListBox1.SelectedIndexChanged
  Dim zi As TimeZoneInfo = CType(ComboBox1.SelectedItem, TimeZoneInfo)
  Dim sz As Boolean = IstSommerzeit(Date.UtcNow, zi)
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sommerzeit Test für bestimmte Zeitzone 
Autor: alexg
Datum: 29.04.22 10:17

Vielen Dank Kuno!

Das hat mir auf die Sprünge geholfen.

Ich mache es jetzt so:

 Public Function Sommerzeit(datum As DateTime) As Boolean
 
        'Gibt True zurück falls es sich um ein Datum in der Sommerzeit der 
        ' Zeitzone "Berlin" handelt
 
        Dim zz_berlin As TimeZoneInfo = Nothing
        Dim zz_alle As New ArrayList
        zz_alle.AddRange(TimeZoneInfo.GetSystemTimeZones.ToArray)
 
        For Each it In zz_alle
            If it.ToString.Contains("Berlin") Then zz_berlin = it
        Next
 
        Return zz_berlin.IsDaylightSavingTime(datum)
 
    End Function
Mir kommt das mit der For Each Schleife noch etwas unschön vor... Kann ich da irgendwie direkter drauf zugreifen, ohne alle durchgehen zu müssen? Nachdem was ich so gelesen habe ändern sich die Ids ja gelegentlich!?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sommerzeit Test für bestimmte Zeitzone 
Autor: Manfred X
Datum: 29.04.22 11:40

Hallo!

Was genau willst Du eigentlich erreichen? Es gibt keine Zeitzone "Berlin".
Es ist auch zu prüfen, welche Angabe in einem konkreten Datetime-Wert steckt
(Lokal oder Global UTC).
Wenn Du z.B. Daten aus einer Datenbank holst, benötigst Du die Information zu der
Zeitbehandlung, die in dieser Datenbank vorgenommen wird. Bei internationalen
Datenbanken wird gewöhnlich keine lokale Zeitzone eingetragen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sommerzeit Test für bestimmte Zeitzone 
Autor: alexg
Datum: 29.04.22 15:54

Hallo Manfred,

ja das stimmt natürlich, es gibt keine Zeitzone "Berlin". Ich schaue hier nach, in welchem Displayname der SystemTimeZones das Wort Berlin vorkommt und verwende dann diese TimeZoneInfo als Bezugs-TimeZone für meine Sommerzeitprüfung.

Deine Nachfrage hat mich aber darauf gebracht mal in meinen Rohdaten zu schauen, was da eigentlich wirklich gespeichert wird.
Es ist ein Feld in einer DB Tabelle auf einem Server in Deutschland. DAs Feld hat den Datentyp DateTimeOffset. Darin gespeichert wird aber die aktuelle Serverzeit entweder als MEZ oder MESZ mit Offset +00:00 --> "2022-04-28 09:20:00.0000000 +00:00".

Dieses Feld wird befüllt wenn irgendwo auf der Welt mit einer Anwendung ein bestimmtes Event auslöst. Jetzt möchte ich wissen, wie spät es jeweils bei dieser Person war (TimeZoneInfo dieser Person weiß ich jeweils).

Jetzt müsste man doch irgendwie meinem DB Wert die TimeZoneInfo für Deutschland anhängen und dann eine Funktion schreiben, der man diesen Wert übergibt, zusätzlich die TimeZoneInfo der Zielzeitzone und sich die entsprechende DateTime der Zielzeitzone zurückgeben lassen oder!?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sommerzeit Test für bestimmte Zeitzone 
Autor: Manfred X
Datum: 29.04.22 17:53

Hallo!

Wenn ich das richtig einordne, willst Du eine UTC-Angabe in eine bestimmte Zeitzone
umrechnen.
Das erledigt die Methode TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime, Name der Zeitzone).
Du musst in der DateTimeVariable die Kind-Eigenschaft auf DateTimeKind.UTC setzen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel