AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitzonenproblem

Ein Thema von Peter666 · begonnen am 9. Mär 2016 · letzter Beitrag vom 10. Mär 2016
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

Zeitzonenproblem

  Alt 9. Mär 2016, 11:26
Hi,

ich hab hier ein Problem mit dem Verständnis:

Delphi-Quellcode:
var
  utctime: TDateTime;
begin
  utctime := EncodeDateTime(2016, 03, 27, 02, 30, 00, 00);
  caption := dateTimeToStr(TTimeZone.Local.ToUniversalTime(utctime));
end;
Ich bekomme eine Exception, da zu dem Zeitpunkt ja Sommerzeit ist. Was muss ich machen, damit die Exception nicht kommt und die korrekte Sommerzeit für den Versatz benutzt wird?

vorher hab ich das wie folgt gemacht und da ging das:

Delphi-Quellcode:
function UTCToLocalTime(UTC: TDateTime): TDateTime;
var
  UTCTime, LocalTime: TSystemTime;
begin
  DatetimetoSystemTime(UTC, UTCTime);
  SystemTimeToTzSpecificLocalTime(@TimeZoneInf, UTCTime, LocalTime);
  result := SystemTimeToDateTime(LocalTime)
end;
Peter
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zeitzonenproblem

  Alt 9. Mär 2016, 13:28
Welche Delphi-Version verwendest Du und welche Unit wird benötigt, um TTimeZone verwenden zu können? Ich habe auf die Schnelle nur "SqlTimSt" als Unit gefunden, und da ist TTimeZone ein Record...

Generell würde ich sagen: Du versuchst über TTimeZone auf eine KLASSE und nicht auf ein instanziertes Objekt zuzugreifen. Zwar könnte auch die Klasse TTimeZone dir ein gültiges Objekt "Local" zurückgeben, würde mich aber zunächst wundern.

Das ich den Quelltext mangels Unit für TTimeZone nicht nachstellen kann: Was passiert, wenn Du eine Variable tmp: TTimeZone erstellst und diese mit tmp := TTimeZone.Create instanzierst? Kannst du dann tmp.local auslesen?
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Zeitzonenproblem

  Alt 9. Mär 2016, 14:09
Der Aufruf von TTimeZone.Local ist schon so in Ordnung. Die kommen aus DateUtils, aber wohl erst in neueren Versionen, XE+?

Was für eine Exception bekommst du denn?

Und die Bezeichnung der Variable ist ein wenig verwirrend, utctime ist tatsächlich ja eine lokale Zeit und im Edit soll die UTC-Zeit ausgegeben werden, oder?

Auch macht deine Beispielfunktion UTCToLocalTime ja genau das Gegenteil. Wenn du eine UTC-Zeit in Lokal umwandeln willst, muss TTimeZone.Local.ToLocalTime verwendet werden.

Geändert von bra ( 9. Mär 2016 um 14:16 Uhr)
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#4

AW: Zeitzonenproblem

  Alt 9. Mär 2016, 14:13
Der Aufruf von TTimeZone.Local ist schon so in Ordnung. Die kommen aus DateUtils, aber wohl erst in neueren Versionen, XE8?
Den 27.03.2016 02:30 Uhr gibt es nicht. Da die Uhrzeit in dieser Nacht von 02:00 -> 03:00 Uhr vorgestellt wird.
Man kann diese nicht "vorhandene" oder "doppelte" Stunde mit IsInvalidTime() bzw. IsAmbiguousTime() prüfen lassen,
dann zuvor eine Stunde addieren, konvertieren und danach wieder abziehen.

Geändert von Bambini ( 9. Mär 2016 um 14:24 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Zeitzonenproblem

  Alt 9. Mär 2016, 14:38
Uff, da muss man erstmal drauf kommen
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#6

AW: Zeitzonenproblem

  Alt 9. Mär 2016, 21:58
Uff, da muss man erstmal drauf kommen
Warum Delphi das bei der Konvertierung auch unbedingt prüfen muss ... hat wohl Gründe die wir noch nicht kennen.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Zeitzonenproblem

  Alt 10. Mär 2016, 09:48
Warum Delphi das bei der Konvertierung auch unbedingt prüfen muss ... hat wohl Gründe die wir noch nicht kennen.
Naja, eigentlich ist es korrekt. Bringt ja nichts mit einer Uhrzeit zu arbeiten, welche es eigentlich nicht geben dürfte. Man kann ja auch nicht einfach annehmen, dass der 29.2. jedes Jahr existiert
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Zeitzonenproblem

  Alt 10. Mär 2016, 12:30
Wenn man einen Zeitwert in UTC hat und den dann mit TTimeZone.Local.ToUniversalTime( utctime ); in ... ja in was will man diese UTC-Zeitangabe (?) denn konvertieren?

Der Methode TTimeZone.Local.ToUniversalTime() muss ein gültiger, lokaler DateTime-Wert übergeben werden. Wenn nicht gibt es eine Exception.

Wenn ich die Bezeichnung utctime lese, dann gehe ich aber mal davon aus, dass hier eben kein lokaler DateTime-Wert vorliegt (ungültig ist der hier auf jeden Fall).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz