AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DateTimeToUnix 1 stunde zurück

Ein Thema von venice2 · begonnen am 18. Dez 2020 · letzter Beitrag vom 20. Dez 2020
Antwort Antwort
Seite 2 von 4     12 34      
venice2
(Gast)

n/a Beiträge
 
#11

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 07:51
.. 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

Geändert von venice2 (18. Dez 2020 um 07:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#12

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:05
@venice2: Müsste nicht folgendes etwas sein was da passt wegen der Zeitzone?

https://www.delphipraxis.net/523002-post5.html
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#13

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:07
@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.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#14

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:12
@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?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:15
.. wenn Du aus dem SO link Beitrag 11 diese Routine
Function DateTime2UnivDateTime(d:TDateTime):TDateTime benutzt

unixUTCTimeStamp := DateTimeToUnix(DateTime2UnivDateTime(now))
Klaus
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#16

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:20
.. wenn Du aus dem SO link Beitrag 11 diese Routine
Function DateTime2UnivDateTime(d:TDateTime):TDateTime benutzt

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;
TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, 0)));

Geändert von venice2 (18. Dez 2020 um 08:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#17

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:24
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)));
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (18. Dez 2020 um 08:31 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#18

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 08:25
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

Geändert von venice2 (18. Dez 2020 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#19

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 09:11
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: 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 TimeStart := DateTimeToUnix(DateTime2UnivDateTime(IncHour(Now, -1)));
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 09:15
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.
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz