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 3 von 4     123 4      
venice2
(Gast)

n/a Beiträge
 
#21

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 10:21
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.
Mein Ergebnis bei
DateTime2Utc(IncDay(Now, 1)); = 30.12.1899

Zitat:
DateTime2UnivDateTime
gibt es bei mir nicht.
Zitat:
TimeStart := DateTimeToUnixWithOffSet(Now, -3600);
Schlägt fehl keine unix zeit.

Geändert von venice2 (18. Dez 2020 um 10:25 Uhr)
  Mit Zitat antworten Zitat
Klaus01

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

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 10:26
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.Text := intToStr(secondsBetween(dateTime2Utc(incDay(now,1)), encodeDate(1970,1,1)));
end;
--> morgen um diese Zeit
Klaus
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#23

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 10:34
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.Text := intToStr(secondsBetween(dateTime2Utc(incDay(now,1)), encodeDate(1970,1,1)));
end;
--> morgen um diese Zeit
Delphi-Quellcode:
    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));
= 9:00 > 11:00 muss aber 10:00 > 12:00 sein.
Das scheint doch schwerer zu sein als gedacht.

Ich verwende auch kein UTC!
Siehe!
Delphi-Quellcode:
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;
Mein Aufruf in 10.4
DateTimeToUnix(IncHour(Now, 0), false);

Geändert von venice2 (18. Dez 2020 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Klaus01

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

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 10:44
Delphi-Quellcode:
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;
mit dem Parameter "AInputIsUTC" gibts Du an, ob der übergebene Zeitwert schon auf UTC "normiert" wurde.
Bei false wird er dann im else Zweig auf UTC "normiert"
Klaus
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#25

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 10:46
Delphi-Quellcode:
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;
mit dem Parameter "AInputIsUTC" gibts Du an, ob der übergebene Zeitwert schon auf UTC "normiert" wurde.
Bei false wird er dann im else Zweig auf UTC "normiert"
Ach so ok. Hab dann wohl was falsch verstanden. Danke
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.

Geändert von venice2 (18. Dez 2020 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Klaus01

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

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 12:58
.. die Frage ist doch must Du die lokale Zeit übergeben?
im ETSI Standard https://www.etsi.org/deliver/etsi_en...07v010201p.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 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:
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;
wobei UnixDateDelta eine Konstante ist: UnixDateDelta: Integer = $63E1;

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#27

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 13:07
Zitat:
.. die Frage ist doch must Du die lokale Zeit übergeben?
Ja.

Zitat:
Wenn Du dann die Zeit in Deiner Liste anzeigen willst, musst Du sie anhand der Zeitzone in eine lokale Zeit umwandeln.
Nein ich muss sie schon im richtigen Format und zwar + 1 Stunde an den Server schicken.
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.
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.

Geändert von venice2 (18. Dez 2020 um 14:01 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#28

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 13:28
Nach vielen Rumprobieren bekomme ich das korrekte Ergebnis mit einer Zeile.

Delphi-Quellcode:
    TimeStart := SecondsBetween(UnixDateDelta, IncHour(Now, 0));
    //DateTimeToUnix(IncHour(Now, 0), true);
    TimeEnd := SecondsBetween(UnixDateDelta, IncDay(Now, 1));
    //DateTimeToUnix(IncDay(Now, 1), true);
Vielen Dank für deine Hilfe.

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.

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

n/a Beiträge
 
#29

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 13:50
links gelöscht..

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

n/a Beiträge
 
#30

AW: DateTimeToUnix 1 stunde zurück

  Alt 19. Dez 2020, 14:03
Zitat:
Nach vielen Rumprobieren bekomme ich das korrekte Ergebnis mit einer Zeile.
War wohl ein Irrtum die korrekte zeit mit D2010 zu bekommen ich schlichtweg unmöglich.
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.

Geändert von venice2 (19. Dez 2020 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 05:57 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