![]() |
Zeitzonenproblem
Hi,
ich hab hier ein Problem mit dem Verständnis:
Delphi-Quellcode:
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?
var
utctime: TDateTime; begin utctime := EncodeDateTime(2016, 03, 27, 02, 30, 00, 00); caption := dateTimeToStr(TTimeZone.Local.ToUniversalTime(utctime)); end; vorher hab ich das wie folgt gemacht und da ging das:
Delphi-Quellcode:
Peter
function UTCToLocalTime(UTC: TDateTime): TDateTime;
var UTCTime, LocalTime: TSystemTime; begin DatetimetoSystemTime(UTC, UTCTime); SystemTimeToTzSpecificLocalTime(@TimeZoneInf, UTCTime, LocalTime); result := SystemTimeToDateTime(LocalTime) end; |
AW: Zeitzonenproblem
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? |
AW: Zeitzonenproblem
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. |
AW: Zeitzonenproblem
Zitat:
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. |
AW: Zeitzonenproblem
Uff, da muss man erstmal drauf kommen ;)
|
AW: Zeitzonenproblem
Zitat:
|
AW: Zeitzonenproblem
Zitat:
|
AW: Zeitzonenproblem
Wenn man einen Zeitwert in UTC hat und den dann mit
Delphi-Quellcode:
in ... ja in was will man diese UTC-Zeitangabe (?) denn konvertieren?
TTimeZone.Local.ToUniversalTime( utctime );
Der Methode ![]()
Delphi-Quellcode:
muss ein gültiger, lokaler DateTime-Wert übergeben werden. Wenn nicht gibt es eine Exception.
TTimeZone.Local.ToUniversalTime()
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). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz