Forum: Programmieren allgemein
by Klaus01,
20. Dez 2020
in 10.4 sieht UnixToDateTime so aus:
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;
Forum: Programmieren allgemein
by Klaus01,
20. Dez 2020
Guten Morgen Emil,
dieser Code macht eigentlich das was Du möchtest.
function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; var lpLocalTime, lpUniversalTime: TSystemTime): BOOL; stdcall;
function TzSpecificLocalTimeToSystemTime; external kernel32 name 'TzSpecificLocalTimeToSystemTime';
implementation
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
.. die Frage ist doch must Du die lokale Zeit übergeben?
im ETSI Standard https://www.etsi.org/deliver/etsi_en/300700_300799/300707/01.02.01_60/en_300707v010201p.pdf
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...
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
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
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := intToStr(secondsBetween(dateTime2Utc(incDay(now,1)), encodeDate(1970,1,1)));
end;
--> morgen um diese Zeit
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
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,...
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
.. wenn Du aus dem SO link Beitrag 11 diese Routine
Function DateTime2UnivDateTime(d:TDateTime):TDateTime benutzt
unixUTCTimeStamp := DateTimeToUnix(DateTime2UnivDateTime(now))
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
.. wen Du das TDateTime Ergebnis zu einem Unix-Timestamp wandelst - dann hast Du wieder Int64.
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
.. den Link hast Du schon gesehen?
https://stackoverflow.com/questions/15567194/how-to-convert-local-time-to-utc-time-in-delphi-and-how-to-convert-it-back-from
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
in 10.3. ist TTimeZone in System.DateUtils zu finden.
Dann scheint es diese Routine für D2010 nicht zu geben.
Vielleicht hilft Dir das dann weiter -> https://stackoverflow.com/questions/15567194/how-to-convert-local-time-to-utc-time-in-delphi-and-how-to-convert-it-back-from
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
function DateTimeToUnix(const AValue: TDateTime): Int64;
begin
aValue := TTimeZone.Local.ToUniversalTime(AValue);
Result := Round((AValue - UnixDateDelta) * SecsPerDay);
end;
oder beim Aufruf
TimeStart := DateTimeToUnix(IncHour( TTimeZone.Local.ToUniversalTime(Now), 0));
Forum: Programmieren allgemein
by Klaus01,
18. Dez 2020
.. geht es in D2010 wenn Du den Wert nicht als raw TDateTime übergibst
sonder ihn erst in den UTC Zeitbereich bringst?
TTimeZone.Local.ToUniversalTime(AValue);
Grüße
Klaus