![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 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