AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DateTimeToUnix 1 stunde zurück

Ein Thema von venice2 · begonnen am 18. Dez 2020 · letzter Beitrag vom 20. Dez 2020
Antwort Antwort
Klaus01

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

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 11: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
 
#2

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 12: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 13:01 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: DateTimeToUnix 1 stunde zurück

  Alt 18. Dez 2020, 12: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 22:08 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: DateTimeToUnix 1 stunde zurück

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

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

n/a Beiträge
 
#5

AW: DateTimeToUnix 1 stunde zurück

  Alt 19. Dez 2020, 13: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 13:13 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#6

AW: DateTimeToUnix 1 stunde zurück

  Alt 19. Dez 2020, 13:33
Woher beziehst Du Deine EPG-Daten?

Wenn ich mit meinem PascalScript die Daten von http://mobile.hoerzu.de/programbystation auswerte, stimmen die Ergebnisse.

Die Uhrzeiten sind in UTC und ich muss auf den Unixwert 3600 Sekunden addieren, damit ich auf die Ortszeit komme.

Quasi: UnixToDateTime("Zeit aus der JSON" + 3600)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: DateTimeToUnix 1 stunde zurück

  Alt 19. Dez 2020, 15:37
Woher beziehst Du Deine EPG-Daten?

Wenn ich mit meinem PascalScript die Daten von http://mobile.hoerzu.de/programbystation auswerte, stimmen die Ergebnisse.
von zattoo
Zitat:
Die Uhrzeiten sind in UTC und ich muss auf den Unixwert 3600 Sekunden addieren, damit ich auf die Ortszeit komme.
Nutzt dir doch nichts.
Du hast zwar dann lokal die richtige Zeit weil du sie im nachhinein geändert hast aber deine Programme sind trotzdem falsch
weil du die EPG Daten von in 1 Stunde angefordert hast und nicht die deiner Lokalen Echtzeit.

Es geht nicht darum das ich irgendetwas addieren muss sondern ich muss die Ortszeit als UTC schicken. Die Unixzeit liegt nun mal 1 stunde vor.
Schicke ich die liegen alle meine Sendezeiten um 1 stunde vor damit kann ich aber nichts anfangen.
Ich will wissen was jetzt läuft und nicht erst in einer Stunde.

Und das geht wie hier schon vergeblich versuch einfach nicht mit D2010, 14.4 funktioniert aber das reicht mir nicht.
Es geht nicht um UnixToDateTime sondern um DateTimeToUnix schicke ich die verkehrte zeit 1 stunde vor sind alle EPG Daten nicht verwendbar.
Ich muss meine Lokale Zeit als UnixZeit an den Server schicken um die EPG Daten von den jetzt laufenden Programmen zu erhalten und nicht erst die in 1 Stunde.
Diese interessieren mich nicht.

Egal.. es wurde hier schon alles versucht.

Geändert von venice2 (19. Dez 2020 um 16:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:59 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