![]() |
DateTimeToUnix 1 stunde zurück
DateTimeToUnix hat in neueren Versionen von Delphi 2 Parameter.
Delphi-Quellcode:
AInputIsUTC: Boolean der 2 Parameter den gibt es nicht unter D2010.
function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64;
var LDate: TDateTime; begin if AInputIsUTC then LDate := AValue else LDate := TTimeZone.Local.ToUniversalTime(AValue); Result := SecondsBetween(UnixDateDelta, LDate); if LDate < UnixDateDelta then Result := -Result; end; Wie kann ich nun die Zeit übergeben das ich in unserer Zeitzone liege. bsp. 5 Uhr und nicht 4 In 10.4 schalte ich dazu den parameter AInputIsUTC auf false. Wie ich schon sagte das geht so nicht unter D2010. Das Problem ich liege mit allen Sendungen um 1 Stunde zurück und die EPG Daten stimmen dann nicht. Ich muss die Unix zeit schicken da ansonsten mein send String einen Fehler zurück gibt.
Delphi-Quellcode:
function DateTimeToUnix(const AValue: TDateTime): Int64;
begin Result := Round((AValue - UnixDateDelta) * SecsPerDay); end; |
AW: DateTimeToUnix 1 stunde zurück
.. geht es in D2010 wenn Du den Wert nicht als raw TDateTime übergibst
sonder ihn erst in den UTC Zeitbereich bringst?
Delphi-Quellcode:
Grüße
TTimeZone.Local.ToUniversalTime(AValue);
Klaus |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Das habe ich.
Delphi-Quellcode:
Der Aufruf
function DateTimeToUnix(const AValue: TDateTime): Int64;
begin Result := Round((AValue - UnixDateDelta) * SecsPerDay); end;
Delphi-Quellcode:
was soll ich jetzt wohin übergeben?
TimeStart := DateTimeToUnix(IncHour(Now, 0));
TimeEnd := DateTimeToUnix(IncDay(Now, 1)); |
AW: DateTimeToUnix 1 stunde zurück
Delphi-Quellcode:
oder beim Aufruf
function DateTimeToUnix(const AValue: TDateTime): Int64;
begin aValue := TTimeZone.Local.ToUniversalTime(AValue); Result := Round((AValue - UnixDateDelta) * SecsPerDay); end;
Delphi-Quellcode:
Grüße
TimeStart := DateTimeToUnix(IncHour( TTimeZone.Local.ToUniversalTime(Now), 0));
Klaus |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
wo ist TTimeZone definiert welche unit? In DateUtils jedenfalls nicht. Danke. |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Dann scheint es diese Routine für D2010 nicht zu geben. Vielleicht hilft Dir das dann weiter -> ![]() |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Welche Möglichkeit gibt es denn sonst noch das muss doch irgendwie gehen. |
AW: DateTimeToUnix 1 stunde zurück
|
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Nutzt mir nichts die Rückgabe von DateTimeToUnix ist Int64 kein TDateTime. Verstehe ich nicht wie hat man das denn unter D2010 geregelt denn das dürfte ja so neu nicht sein. |
AW: DateTimeToUnix 1 stunde zurück
.. wen Du das TDateTime Ergebnis zu einem Unix-Timestamp wandelst - dann hast Du wieder Int64.
|
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Keine Ahnung was ich da jetzt von benutzen soll. Habe mal gesucht . .. ![]() Result so gut wie nichts |
AW: DateTimeToUnix 1 stunde zurück
@venice2: Müsste nicht folgendes etwas sein was da passt wegen der Zeitzone?
![]() |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Keine Idee im Moment wie ich TDateTime wieder zurück nach Int64 setzen soll. Bin vielleicht zu blöd dafür. |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Zeit ermitteln als TDateTime und ggf. Zeitzone anpassen (was ich oben im Link meinte) Danach erst die Umwandlung mit DateTimeToUnix in dein gewünschtes Format und übergeben. Müsste es nicht dann passen? |
AW: DateTimeToUnix 1 stunde zurück
.. wenn Du aus dem SO link Beitrag 11 diese Routine
Function DateTime2UnivDateTime(d:TDateTime):TDateTime benutzt
Delphi-Quellcode:
unixUTCTimeStamp := DateTimeToUnix(DateTime2UnivDateTime(now))
|
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Frühstücksfernsehen fängt dann um 4:30 an.
Delphi-Quellcode:
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime'; //... Function DateTime2UnivDateTime(d:TDateTime):TDateTime; var TZI:TTimeZoneInformation; LocalTime, UniversalTime:TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemTime(d,LocalTime); TzSpecificLocalTimeToSystemTime(@tzi,LocalTime,UniversalTime); Result := SystemTimeToDateTime(UniversalTime); end;
Delphi-Quellcode:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 0)));
|
AW: DateTimeToUnix 1 stunde zurück
Blöde Frage aber müsste da nicht anstatt der 0 eine 1 sein, also:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 1))); Wobei das eigentlich ja nur ein "workaround" sein kann. Du müsstest anhand dessen ob Sommerzeit oder Winterzeit ist, die "1" anpassen. RETURN VALUE 0 Daylight saving time is not used in the current time zone, because there are no transition dates or automatic adjustment for daylight saving time is disabled. 1 The system is operating in the range covered by the StandardDate member of the TIME_ZONE_INFORMATION structure. 2 The system is operating in the range covered by the DaylightDate member of the TIME_ZONE_INFORMATION structure. Wenn ich also GetTimeZoneInformation() richtig verstehe, könntest du es hier einsetzen: GetTimeZoneInformation(tzi); TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, tzi))); |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Delphi-Quellcode:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 0)));
//DateTimeToUnix(IncHour(Now, 0)); TimeEnd := DateTimeToUnix(DateTime2UnivDateTime(IncDay(Now, 1))); //DateTimeToUnix(IncDay(Now, 1))
Delphi-Quellcode:
funktioniert einwandfrei unter 10.4
DateTimeToUnix(IncHour(Now, 0), false);
DateTimeToUnix(IncDay(Now, 1, false)) EDIT: Wenn ich dort eine 1 einfügen würde dann müsste ich jetzt schon Das Frühstücksfernsehen laut der EPG Daten starten können und zwar in der Zeit von 9:00 > 11:00 Das stimmt aber nicht. Die Sendung läuft zur jetzigen zeit noch nicht. Und die läuft eigentlich erst von 10 > 12 Uhr.. Nach wie vor ich liege um 1 Stunde zurück. siehe pic |
AW: DateTimeToUnix 1 stunde zurück
In Unix ist die Zeit doch Sekunden seit 1.1.1970.
1 Stunde sind 60 Minuten * 60 Sekunden -> 3600 Sekunden. Unixzeit in Greenwich (UTC) + 3600 müsste dann doch die Uhrzeit bei uns (Berlin) ergeben? Unsere Uhrzeit -1 Stunde ergibt UTC. Oder irre ich da? Also ungefähr sowas:
Delphi-Quellcode:
Oder eventuell:
function DateTimeToUnixWithOffSet(const AValue: TDateTime; const AOffSet : Int64): Int64;
begin Result := Round((AValue - UnixDateDelta) * SecsPerDay) + AOffSet; end; ... TimeStart := DateTimeToUnixWithOffSet(Now, -3600); // Eine Stunde zurück -> UTC TimeEnd := DateTimeToUnixWithOffSet(Now, 3600); // Eine Stunde vor -> ergibt eine Zeitspanne von 2 Stunden
Delphi-Quellcode:
Nur hab' ich keine Ahnung, ob es DecHour gibt, Google findet es jedenfalls nicht.
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(DecHour(Now, 1)));
Kann IncHour auch mit negativen Zahlen umgehen? Dann
Delphi-Quellcode:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, -1)));
|
AW: DateTimeToUnix 1 stunde zurück
Delphi-Quellcode:
wenn ich die Zeit
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime'; implementation uses system.dateUtils; Function DateTime2Utc(d:TDateTime):TDateTime; var TZI:TTimeZoneInformation; LocalTime, UniversalTime:TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemTime(d,LocalTime); TzSpecificLocalTimeToSystemTime(@tzi,LocalTime,UniversalTime); Result := SystemTimeToDateTime(UniversalTime); end; procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := intToStr(secondsBetween(dateTime2Utc(now), encodeDate(1970,1,1))); end; ![]() bekomme ich die aktuelle Zeit. |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Delphi-Quellcode:
= 30.12.1899
DateTime2Utc(IncDay(Now, 1));
Zitat:
Zitat:
|
AW: DateTimeToUnix 1 stunde zurück
Delphi-Quellcode:
--> morgen um diese Zeit
procedure TForm1.Button1Click(Sender: TObject);
begin edit1.Text := intToStr(secondsBetween(dateTime2Utc(incDay(now,1)), encodeDate(1970,1,1))); end; |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Delphi-Quellcode:
= 9:00 > 11:00 muss aber 10:00 > 12:00 sein.
TimeStart := secondsBetween(dateTime2Utc(IncHour(now, 0)), encodeDate(1970,1,1));
//DateTimeToUnix(IncHour(Now, 0)); TimeEnd := secondsBetween(dateTime2Utc(IncDay(now, 1)), encodeDate(1970,1,1)); //DateTimeToUnix(IncDay(Now, 1)); Das scheint doch schwerer zu sein als gedacht. Ich verwende auch kein UTC! Siehe!
Delphi-Quellcode:
Mein Aufruf in 10.4
function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64;
var LDate: TDateTime; begin if AInputIsUTC then LDate := AValue else LDate := TTimeZone.Local.ToUniversalTime(AValue); Result := SecondsBetween(UnixDateDelta, LDate); if LDate < UnixDateDelta then Result := -Result; end; DateTimeToUnix(IncHour(Now, 0), false); |
AW: DateTimeToUnix 1 stunde zurück
Delphi-Quellcode:
mit dem Parameter "AInputIsUTC" gibts Du an, ob der übergebene Zeitwert schon auf UTC "normiert" wurde.
function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64;
var LDate: TDateTime; begin if AInputIsUTC then LDate := AValue else LDate := TTimeZone.Local.ToUniversalTime(AValue); // <<---- Result := SecondsBetween(UnixDateDelta, LDate); if LDate < UnixDateDelta then Result := -Result; end; Bei false wird er dann im else Zweig auf UTC "normiert" |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Aber leider tun es die bisherigen Funktionen nicht. Schade Naja wenn es nicht klappt dann lass ich es mit den EPG Kram einfach und gut ist. Frage mich nur wie man das früher gemacht hat wenn die Leute eine Stunde zurück setzen mussten. Ging doch auch ohne 10.4 (in D6 oder was auch immer) EDIT: Nun gut Fakt ist jedoch das genau AInputIsUTC den unterschied ausmacht ob ich nun eine stunde mehr oder weniger übergebe. Bei false ist die Zeit meine Locale bei true liegt sie 1 Stunde zurück. |
AW: DateTimeToUnix 1 stunde zurück
.. die Frage ist doch must Du die lokale Zeit übergeben?
im ETSI Standard ![]() Seite 39, wird die start_time und stop_time in UTC erwartet. start_time The start time of the event In Universal Time, Co-ordinated (UTC) and Modified Julian Date (MJD) (see also time_date). If the start time is not known, a notional time which positions the event during the day should be transmitted. Example: 93-10-13 12:45 = 0 x C0791245. stop_time The stop time of the event in Universal Time, Co-ordinated (UTC). This field is coded as 16 bits coded as 4 digit in 4 bit Binary Coded Decimal (BCD). If undefined all bits shall be set to 1. Wenn Du dann die Zeit in Deiner Liste anzeigen willst, musst Du sie anhand der Zeitzone in eine lokale Zeit umwandeln. Im Winter (normal Zeit) ist die normal Zeit in Deutschland UTC +1
Delphi-Quellcode:
wobei UnixDateDelta eine Konstante ist: UnixDateDelta: Integer = $63E1;
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime'; implementation uses system.dateUtils; Function DateTime2Utc(d:TDateTime):TDateTime; var TZI:TTimeZoneInformation; LocalTime, UniversalTime:TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemTime(d,LocalTime); TzSpecificLocalTimeToSystemTime(@tzi,LocalTime,UniversalTime); Result := SystemTimeToDateTime(UniversalTime); end; function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64; var LDate: TDateTime; begin if AInputIsUTC then LDate := AValue else LDate :=DateTimeToUtc(AValue); // <<---- Result := SecondsBetween(UnixDateDelta, LDate); if LDate < UnixDateDelta then Result := -Result; end; Grüße Klaus |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Zitat:
Tue ich das nicht ist die aktuelle zeit in den EPG Daten falsch. Siehe die Funktion aus Delphi 14.4 Auf Streife läuft von 13 > 14 Uhr nicht von 12 > 13. Und das ist was ich mit deiner änderung angezeigt bekomme. Es fehlt weiterhin 1 Stunde. Trotzdem Danke für den versuch. (noch mal ein Shot) Unter 14.4 wird diese zeile ausgeführt aber nur wenn AInputIsUTC false ist.
Delphi-Quellcode:
LDate := TTimeZone.Local.ToUniversalTime(AValue);
danach habe ich die korrekte Zeit nämlich + 1 Stunde. (Local Zeit) Ich vordere eine *.json an und zwar mit der übergeben Zeit die ich an den Server schicke. EDIT: TimeStart := DateTimeToUnix(IncHour(Now, 0), true); TimeEnd := DateTimeToUnix(IncDay(Now, 1), true); funktioniert bei dir. false nicht.. also genau umgekehrt. |
AW: DateTimeToUnix 1 stunde zurück
Nach vielen Rumprobieren bekomme ich das korrekte Ergebnis mit einer Zeile.
Delphi-Quellcode:
Vielen Dank für deine Hilfe.
TimeStart := SecondsBetween(UnixDateDelta, IncHour(Now, 0));
//DateTimeToUnix(IncHour(Now, 0), true); TimeEnd := SecondsBetween(UnixDateDelta, IncDay(Now, 1)); //DateTimeToUnix(IncDay(Now, 1), true); Aber: Du wirst es nicht glauben die gleiche Funktion in 10.4 ergibt ein ganz anderes Resultat nämlich von 14 -> 15 Uhr. Also da läuft etwas schwer daneben in Delphi D2010 via 10.4 Ich mache mal ein Video. |
AW: DateTimeToUnix 1 stunde zurück
links gelöscht..
|
AW: DateTimeToUnix 1 stunde zurück
Zitat:
DateTimeToUnix ist einfach ungenügend in D2010 ok alte version.. von daher @seufz.. Bei dem was hier jetzt alles so versucht wurde muss ich das wohl so akzeptieren. Macht keinen sinn EPG Daten einzulesen zu wollen die eh nicht stimmen. Danke für eure Hilfe trotzdem. Egal.. werfe das EPG wieder raus macht so keinen sinn. |
AW: DateTimeToUnix 1 stunde zurück
Woher beziehst Du Deine EPG-Daten?
Wenn ich mit meinem PascalScript die Daten von ![]() Die Uhrzeiten sind in UTC und ich muss auf den Unixwert 3600 Sekunden addieren, damit ich auf die Ortszeit komme. Quasi: UnixToDateTime("Zeit aus der JSON" + 3600) |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Zitat:
Du hast zwar dann lokal die richtige Zeit weil du sie im nachhinein geändert hast aber deine Programme sind trotzdem falsch weil du die EPG Daten von in 1 Stunde angefordert hast und nicht die deiner Lokalen Echtzeit. Es geht nicht darum das ich irgendetwas addieren muss sondern ich muss die Ortszeit als UTC schicken. Die Unixzeit liegt nun mal 1 stunde vor. Schicke ich die liegen alle meine Sendezeiten um 1 stunde vor damit kann ich aber nichts anfangen. Ich will wissen was jetzt läuft und nicht erst in einer Stunde. Und das geht wie hier schon vergeblich versuch einfach nicht mit D2010, 14.4 funktioniert aber das reicht mir nicht. Es geht nicht um UnixToDateTime sondern um DateTimeToUnix schicke ich die verkehrte zeit 1 stunde vor sind alle EPG Daten nicht verwendbar. Ich muss meine Lokale Zeit als UnixZeit an den Server schicken um die EPG Daten von den jetzt laufenden Programmen zu erhalten und nicht erst die in 1 Stunde. Diese interessieren mich nicht. Egal.. es wurde hier schon alles versucht. |
AW: DateTimeToUnix 1 stunde zurück
Versuche es mal mit mORMot Unit SynCommons.pas.
Delphi-Quellcode:
Den Sourcecode habe ich jetzt nicht getestet. Wenns nicht passt, es gibt einige Zeitfunktionen in der Unit.
var
tlb: TTimeLogBits; begin tlb.FromUTCTime; ShowMessage(tlb.Text(True)); ShowMessage(IntToStr(tlb.ToUnixTime)); end; Bis bald... Thomas |
AW: DateTimeToUnix 1 stunde zurück
Zitat:
Ich muss ja die aktuelle zeit übergeben und mit ToUnixTime ist das nicht gegeben. Die anderen habe ich schon geprüft und funktionieren auch nicht so wie sie sollen. Die Zeit unter D 10.4 ist korrekt aber ich kann es so in D2010 nicht umsetzen. Weil ich aber 32Bit und 64Bit gleichhallten möchte in der Funktionsweise muss ich so leider darauf verzischten. Und nein ich will D 14.4 nicht für 32Bit verwenden da ich nicht einsehe das mein Kompilat um das 4 Fache in der Größe ansteigt. DateTimeToUnixTime SynCommons Funktioniert nicht einmal unter 10.4 korrekt. Nur mal so nebenbei. Ich will nicht sehen was in einer Stunde läuft (The Voice of Germany) sondern das was jetzt läuft. (Auf Streife) Siehe Shots! EDIT: Nicht das wir uns missverstehen. DateTimeToUnixTime ist schon richtig es sendet die UnixZeit + 1 Stunde. Nur DateTimeToUnix (DateUtils) schickt die UnixZeit und zieht die 1 Stunde ab abhängig vom gesetzten flag AInputIsUTC das ist der feine Unterschied. Die Zeit wird also direkt nach UTC konvertiert. |
AW: DateTimeToUnix 1 stunde zurück
Guten Morgen Emil,
dieser Code macht eigentlich das was Du möchtest.
Delphi-Quellcode:
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime'; implementation // trennt die Lokale Zeit von der TimeZone Function DateTimeToUtc(d:TDateTime):TDateTime; var TZI:TTimeZoneInformation; LocalTime, UniversalTime:TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemTime(d,LocalTime); TzSpecificLocalTimeToSystemTime(@tzi,LocalTime, UniversalTime); Result := SystemTimeToDateTime(UniversalTime); end; function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64; var LDate: TDateTime; begin if AInputIsUTC then LDate := AValue else LDate := DateTimeToUtc(AValue); Result := SecondsBetween(UnixDateDelta, LDate); if LDate < UnixDateDelta then Result := -Result; end; procedure TForm1.Button1Click(Sender: TObject); var lDate: TDateTime; begin lDate := now; Memo1.Lines.Add('lokale Zeit: ' + dateTimeToStr(lDate)); Memo1.Lines.Add('standort Utc: ' + dateTimeToStr(DateTimeToUtc(lDate))); Memo1.Lines.Add('lokale Zeit Unix: ' + intToStr(DateTimeToUnix(lDate, true))); Memo1.Lines.Add('standort UTC Unix: ' + intToStr(DateTimeToUnix(lDate, false))); end;
Code:
Grüße
lokale Zeit: 20.12.2020 09:11:28
standort Utc: 20.12.2020 08:11:28 lokale Zeit Unix: 1608455488 standort UTC Unix: 1608451888 Klaus |
AW: DateTimeToUnix 1 stunde zurück
Guten Morgen Klaus :)
Danke für deine Mühe sieht gut aus werde es nochmal versuchen. |
AW: DateTimeToUnix 1 stunde zurück
Das ist was ich bekomme..
Delphi-Quellcode:
Daten die ausgewertet werden..
ShowMessage('TimeStart = ' + IntToStr(TimeStart) +
#13#10 + 'TimeEnd = ' + IntToStr(TimeEnd) + #13#10 + 'lokale Zeit: ' + DateTimeToStr(IncHour(Now, 0)) + #13#10 + 'standort Utc: ' + DateTimeToStr(DateTimeToUtc(IncHour(Now, 0))));
Delphi-Quellcode:
gEpg[iRun].ry_u := docPrograms.I['ry_u'];
if gEpg[iRun].ry_u <> 0 then SEnd[iRun] := UnixToDateTime(gEpg[iRun].ry_u); // End Zeit gEpg[iRun].s:= docPrograms.I['s']; if gEpg[iRun].s <> 0 then sStart[iRun] := UnixToDateTime(gEpg[iRun].s); // Start Zeit Siehe Pics Daten sind alle Falsch das ist was ich nicht verstehe. Falsche Programme falsche Zeit. Unter 14.4 Siehe blaue Pic (Was macht 14.4 anders? ) Der String der gesendet wird
Delphi-Quellcode:
Daten die Initialisiert werden für den SendStr
SendStr := FProvRec.URL +
cPathEPG + FProvRec.PWRHASH + '?end=' + inttostr(TimeEnd) + '&start=' + inttostr(TimeStart) + '&format=json' + '&details=True';
Delphi-Quellcode:
stimmen die Zeiten nicht dann lade ich die falschen EPG Daten.
TimeStart := DateTimeToUnix(IncHour(Now, 0), false);
TimeEnd := DateTimeToUnix(IncDay(Now, 1), false); |
AW: DateTimeToUnix 1 stunde zurück
in 10.4 sieht UnixToDateTime so aus:
Delphi-Quellcode:
Da es TTimeZone in D2010 noch nicht gibt, muss dies wieder ersetzt werden.
function UnixToDateTime(const AValue: Int64; AReturnUTC: Boolean): TDateTime;
begin if AReturnUTC then Result := IncSecond(UnixDateDelta, AValue) else Result := TTimeZone.Local.ToLocalTime(IncSecond(UnixDateDelta, AValue)); end;
Delphi-Quellcode:
->>
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation; var lpUniversalTime,lpLocalTime: TSystemTime): BOOL; stdcall; implementation function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime'; function SystemTimeToTzSpecificLocalTime; external kernel32 name 'SystemTimeToTzSpecificLocalTime'; Function UtcToLocalDateTime(d:TDateTime):TDateTime; var TZI:TTimeZoneInformation; LocalTime, UniversalTime:TSystemTime; begin GetTimeZoneInformation(tzi); DateTimeToSystemTime(d,UniversalTime); SystemTimeToTzSpecificLocalTime(@tzi,UniversalTime,LocalTime); Result := SystemTimeToDateTime(LocalTime); end;
Delphi-Quellcode:
Grüße
function UnixToDateTime(const AValue: Int64; AReturnUTC: Boolean): TDateTime;
begin if AReturnUTC then Result := IncSecond(UnixDateDelta, AValue) else Result := UtcToLocalDateTime(IncSecond(UnixDateDelta, AValue)); end; Klaus |
AW: DateTimeToUnix 1 stunde zurück
Ja nur was möchtest du mir jetzt sagen es funktioniert nicht habe ich anhand der Bilder dokumentiert.
Ach so das ist die andere Funktion.. werde es testen. Danke. Der vergleich mit deiner Änderung.. Irgendwie will das nicht. EDIT: Habe es nochmal geprüft und festgestellt das dort noch ein Fehler war. Hatte bei
Delphi-Quellcode:
TimeStart := DateTimeToUnix(IncHour(Now, 0), false);
true anstatt false. Jetzt scheint es zu gehen.. werde es weiterhin noch beobachten. Bin dir sehr zu dank verpflichtet ohne dich hätte ich es aufgegeben. (hast meinen Tag gerettet) :) Bei Sportschau fehlt die Endzeit ist aber ein Fehler in der Json die fehlt dort! Kann da nichts machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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