![]() |
Zeitumrechnung möglich?
Hallo zusammen,
ich würde gerne wissen ob es möglich ist eine Datums und Zeitangabe in eine andere Zeitzone umzurechnen? Konkret möchte ich gerne Datum und Zeitangaben aus Phoenix (Arizona) in die deutsche Zeit umrechnen: ![]() Die Zeitzone dort ist demnach UTC/GMT -7 hours, weitere Besonderheit: "No daylight saving time" Offen gesagt frage ich mich wirklich ob sich sowas überhaut realisieren lässt. Die Funktion müsste ja auch den Kalender berücksichtigen und Sommer/Winterzeit. Lässt sich sowas mit Delphi realisieren? Wenn ja, wie wäre euer Ansatz? Vielen Dank! LG, Chris |
AW: Zeitumrechnung möglich?
Warum nicht möglich? :shock:
Zielzeit = Quellzeit - [Quellzeit UTC Versatz] + [Zielzeit UTC Versatz] + [Wenn Quellzeit mit Sommerzeit und Datum im Bereich Sommerzeit, dann 1, sonst 0] - [Wenn Zielzeit mit Sommerzeit und Datum im Bereich Sommerzeit, dann 1, sonst 0] |
AW: Zeitumrechnung möglich?
Hallo,
vielen Dank für deine schnelle Antwort. Und was wäre wenn durch die Zeitverschiebung die Zeit in ein anderes Datum fällt? Dann müsste doch z.B. ein Kalender zur Rate gezogen werden und geschaut werden welches Datum der vorherige Tag war? Irgendwie habe ich so Angst das es etwas "unsauber" ist LG, Chris |
AW: Zeitumrechnung möglich?
TDateTime besteht aus Datums- und Zeitanteil, von daher verstehe ich diese Frage nicht.
|
AW: Zeitumrechnung möglich?
Genau so isses. Du müsstest dir eine Liste mit allen Sommerzeitumstellungen holen und pflegen.
BTW in Deutschland gab es auch mal eine Sommerzeit mit 2h Versatz ;) |
AW: Zeitumrechnung möglich?
Wenn ich keinen Denkfehler mache, braucht man doch "nur" eine Hilfsfunktion UTCToMESZ, die die Regel (Quelle: Wikipedia):
Zitat:
|
AW: Zeitumrechnung möglich?
Vielen Dank für eure Antworten.
Leider hört sich das ganze relativ kompliziert und für mich als Anfänger nahezu nicht umsetzbar an. Gibt es keine einfachere Möglichkeit? z.B. Datum und Zeit in einen Timestamp zu konvertieren und daraus die richtige Zeit holen? LG, Chris |
AW: Zeitumrechnung möglich?
Vielleicht wirst du ja hier fündig:
![]() |
AW: Zeitumrechnung möglich?
Zitat:
|
AW: Zeitumrechnung möglich?
Delphi hat eine ganze Menge anzubieten.
![]() Wenn du einen Ansatz brauchst: Um zb. ohne weitere Überlegungen 2 Stunden von einem DateTime abzuziehen, also die Zeit um 2 Stunden zurück zu drehen geht folgendes: DateUtils.IncHour (Wobei es auch eigtl "DecHour" ist weil du negative Werte übergeben kannst)
Delphi-Quellcode:
Jetzt : TDatetime
IncHour(Jetzt,-2); Grüße |
AW: Zeitumrechnung möglich?
Gibt es das dort auch? AFAIK ist das eine rein europäische Erfindung.
|
AW: Zeitumrechnung möglich?
Ich sehe auch grade noch speziell diesen Eintrag:
![]() Vielleicht rechnest du einfach hin und dann zurück ->, du schaffst das schon ;) |
AW: Zeitumrechnung möglich?
Zitat:
|
AW: Zeitumrechnung möglich?
Gerade gefunden:
![]() Zitat:
|
AW: Zeitumrechnung möglich?
"No daylight saving time" Hat er doch im ersten Post geschrieben...
|
AW: Zeitumrechnung möglich?
Dann hab ich das ja nur bestätigt ;). Macht die Berechnung etwas einfacher wie schon beschrieben.
|
AW: Zeitumrechnung möglich?
Zitat:
|
AW: Zeitumrechnung möglich?
Ich habe es nicht getestet (und evtl. auch wieder zu kompliziert gedacht), aber klappt das hier?
Delphi-Quellcode:
uses DateUtils;
function ArizonaTimeToMEZ(aDateTime: TDateTime): TDateTime; const UTC_DIFF = 7; SUMMERTIME_RELEVANTHOUR = 2; function UTCToMEZ(aDateTime: TDateTime): TDateTime; var SummerTimeStart, SummerTimeEnd: TDateTime; Year: word; function LastDayOfWeekOfMonth(Year, month: Integer; DayOfWeek: word): TDate; var temp: TDate; begin temp := IncMonth(EncodeDate(Year, month, 1)); Result := IncDay(temp, (DayOfWeek - DayOfTheWeek(temp) + DaysPerWeek) mod DaysPerWeek - DaysPerWeek); end; begin Year := YearOf(aDateTime); SummerTimeStart := LastDayOfWeekOfMonth(Year, MonthMarch, DaySunday); SummerTimeStart := IncHour(DateOf(SummerTimeStart), SUMMERTIME_RELEVANTHOUR); SummerTimeEnd := LastDayOfWeekOfMonth(Year, MonthOctober, DaySunday); SummerTimeEnd := IncHour(DateOf(SummerTimeEnd), SUMMERTIME_RELEVANTHOUR); Result := aDateTime; if DateTimeInRange(aDateTime, SummerTimeStart, SummerTimeEnd) then Result := IncHour(Result); end; begin Result := UTCToMEZ(IncHour(aDateTime, UTC_DIFF)); end; |
AW: Zeitumrechnung möglich?
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe kurz eine allgemeine Klasse gebastelt, vielleicht kannst Du mit der was anfangen, gegf. musst Du sie noch etwas aufbohren.
|
AW: Zeitumrechnung möglich?
Hallo nochmals,
vielen vielen Dank für die zahlreichen, schnellen und sehr hilfreichen Antworten. Sowohl die Codelösung von DeddyH als auch die Alternative von Bummi funktionieren, ich bin zusätzlich dank Jonas Shinaniganz noch auf folgende Lösung aufmerksam geworden: ![]() Damit kann man von einer Timezone in Universalzeit und von dort in eine andere Timezone umwandeln. Jetzt bin ich unsicher welche Lösung die "beste", also sicherste und zuverlässigste ist. Insbesondere in Bezug auf Sommer/Winterzeit und Kalenderbesonderheiten. LG, Chris |
AW: Zeitumrechnung möglich?
Meine ist sicherlich nicht die beste, da sie nur von Arizona nach Mitteleuropa umrechnet. Die anderen sind universeller.
|
AW: Zeitumrechnung möglich?
Ich hatte noch einen bösen Bug drin ... DayLightDate wurde nicht berücksichtigt ist behoben.
|
AW: Zeitumrechnung möglich?
Zitat:
![]() :gruebel: |
AW: Zeitumrechnung möglich?
Uwe,
entschuldige bitte vielmals. Der Hinweis kann selbstverständlich von dir, mein Fehler. Da ich versucht habe möglichst alle Antworten direkt zu verwerten bin ich etwas durcheinander gekommen. Von Jonas kam der Hinweis auf TTimezone welches auf dem von dir empfohlenen Projekt nochmals erwähnt wird. Ich werde alle drei Lösungen nun noch einmal ausgiebig testen und dann schauen womit ich mich am sichersten fühle. Ggf. könnte ich auch alle Lösungen nehmen und dann das Ergebnis zur Sicherheit vergleichen. Für die schnelle und kompetente Hilfe noch einmal vielen Dank an alle Beteiligten. Es ist wirklich schön, dass dieses Forum Delphi am Leben hält und zeigt was damit alles möglich ist. LG, Chris |
AW: Zeitumrechnung möglich?
Halb OT:
Ich wäre froh, wenn das auch mal jemand Microsoft erklären könnte. Ich ärgere mich seit 2 Jahren damit rum, dass live (bzw. hotmail / outlook.com) beim Synchronisieren mit WP7 und Outlook die Geburtstage immer um 1 Tag verschiebt. Das passiert auch nicht in allen Zeitzonen (aber leider in unserer) und seit einem Update auch nur noch bei Geburtstagen, die in die Sommerzeit fallen. Das Thema scheint also wirklich nicht trivial zu sein, auch wenn ich mich frage, wieso man überhaupt bei Geburtstagen mit Uhrzeiten/Zeitzonen rechnet... |
AW: Zeitumrechnung möglich?
Zitat:
Damit die Reichen und Schönen, die einen eigenen Lear-Jet zur Verfügung haben, in einer Nacht x-mal ihren Geburtstag feiern können. Back to Topic: Kann man denn nicht feststellen, was die kritischen Punkte sind (u.a. die Tage an denen die Umstellung von Sommer- auf Winterzeit erfolgt) und die genannten Funktionen gegen diese Punkte prüfen? |
AW: Zeitumrechnung möglich?
Sind ja vorhanden. In der Registry findest Du die benötigten Infos. In der Klasse von mir siehst Du wo und wie.
|
AW: Zeitumrechnung möglich?
Zitat:
Es passiert mir auch manchmal, daß genau in dem Moment, wo ich auf Antworten klicke, plötzlich ein oder mehrere zusätzliche Beiträge da sind, die ich dann leicht übersehe. |
AW: Zeitumrechnung möglich?
Zitat:
endet. Für einen Beliebigen Tag wird im allg. das Datum mit der 0-Zeit genommen. Es wird aber auch das andere Extrem genutzt. Und was passiert wenn ich auf eine solche Zeit einevStunde rauf oder runter rechne?? Gruß K-H |
AW: Zeitumrechnung möglich?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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-2025 by Thomas Breitkreuz