| |
VB.NET - Ein- und UmsteigerSommerzeit 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? | |
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 | |
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!? | |
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. | |
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!? | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
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
|
|