Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DateTimeToUnix 1 stunde zurück (https://www.delphipraxis.net/206411-datetimetounix-1-stunde-zurueck.html)

venice2 18. Dez 2020 07:51

AW: DateTimeToUnix 1 stunde zurück
 
Zitat:

Zitat von Klaus01 (Beitrag 1479439)
.. wen Du das TDateTime Ergebnis zu einem Unix-Timestamp wandelst - dann hast Du wieder Int64.

Beispiel?
Keine Ahnung was ich da jetzt von benutzen soll.

Habe mal gesucht . .. Bei Google suchenDateTimeToUnix to local time delphi D2010
Result so gut wie nichts

Moombas 18. Dez 2020 08:05

AW: DateTimeToUnix 1 stunde zurück
 
@venice2: Müsste nicht folgendes etwas sein was da passt wegen der Zeitzone?

https://www.delphipraxis.net/523002-post5.html

venice2 18. Dez 2020 08:07

AW: DateTimeToUnix 1 stunde zurück
 
Zitat:

Zitat von Moombas (Beitrag 1479443)
@venice2: Müsste nicht folgendes etwas sein was da passt wegen der Zeitzone?

https://www.delphipraxis.net/523002-post5.html

Danke es wird überall TDateTime zurückgegeben ich brauche aber Int64

Keine Idee im Moment wie ich TDateTime wieder zurück nach Int64 setzen soll.
Bin vielleicht zu blöd dafür.

Moombas 18. Dez 2020 08:12

AW: DateTimeToUnix 1 stunde zurück
 
Zitat:

Zitat von venice2 (Beitrag 1479445)
Zitat:

Zitat von Moombas (Beitrag 1479443)
@venice2: Müsste nicht folgendes etwas sein was da passt wegen der Zeitzone?

https://www.delphipraxis.net/523002-post5.html

Danke es wird überall TDateTime zurückgegeben ich brauche aber Int64

Keine Idee im Moment wie ich TDateTime wieder zurück nach Int64 setzen soll.
Bin vielleicht zu blöd dafür.

Naja, also ich würde es so machen:
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?

Klaus01 18. Dez 2020 08:15

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))

venice2 18. Dez 2020 08:20

AW: DateTimeToUnix 1 stunde zurück
 
Zitat:

Zitat von Klaus01 (Beitrag 1479447)
.. wenn Du aus dem SO link Beitrag 11 diese Routine
Function DateTime2UnivDateTime(d:TDateTime):TDateTime benutzt

Delphi-Quellcode:
unixUTCTimeStamp := DateTimeToUnix(DateTime2UnivDateTime(now))

Danke habe es versucht immer noch 1 Stunde zurück.
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)));

Moombas 18. Dez 2020 08:24

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)));

venice2 18. Dez 2020 08:25

AW: DateTimeToUnix 1 stunde zurück
 
Zitat:

Zitat von Moombas (Beitrag 1479449)
Blöde Frage aber müsste da nicht anstatt der 0 eine 1 sein, also:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 1)));

Nein.
Delphi-Quellcode:
    TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 0)));
    //DateTimeToUnix(IncHour(Now, 0));
    TimeEnd  := DateTimeToUnix(DateTime2UnivDateTime(IncDay(Now, 1)));
    //DateTimeToUnix(IncDay(Now, 1))
Delphi-Quellcode:
DateTimeToUnix(IncHour(Now, 0), false);
DateTimeToUnix(IncDay(Now, 1, false))
funktioniert einwandfrei unter 10.4

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

Delphi.Narium 18. Dez 2020 09:11

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:
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
Oder eventuell:
Delphi-Quellcode:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(DecHour(Now, 1)));
Nur hab' ich keine Ahnung, ob es DecHour gibt, Google findet es jedenfalls nicht.

Kann IncHour auch mit negativen Zahlen umgehen? Dann
Delphi-Quellcode:
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, -1)));

Klaus01 18. Dez 2020 09:15

AW: DateTimeToUnix 1 stunde zurück
 
Delphi-Quellcode:
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;
wenn ich die Zeit hier wieder von Unix nach real Zeit umwandele,
bekomme ich die aktuelle Zeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
Seite 2 von 4     12 34      

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