Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Das 2038-Problem: wie würdet ihr euch vorbereiten? (https://www.delphipraxis.net/193693-das-2038-problem-wie-wuerdet-ihr-euch-vorbereiten.html)

Glados 29. Aug 2017 23:30


Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Aus gegebenem Anlass
Zitat:

Zitat von himitsu (Beitrag 1379904)
PS: Ab dem 19. Januar 2038 um 03:14:08 wird deine Funktion wieder kaputt sein, wenn der Integer zu klein für den Unix-Timestamp ist. :angle:

Wie werdet ihr damit umgehen? Sind wir jetzt mal theoretisch und lassen Sachen wie Rente usw außer acht.
Wie würdet ihr eure Software schon jetzt anpassen, damit ihr nicht von dem Problem betroffen seid?

Ich würde vermutlich vor lauter Dummheit einfach Cardinal nehmen statt Integer. Geht das überhaupt?
Oder aber das ISO 8601 YYYYMMDDHHMMSS-Format.

Redeemer 29. Aug 2017 23:55

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Ich wandle, anders als du, Int64 nicht unnötigerweise in Integer um und lese Compilermeldungen.

Glados 29. Aug 2017 23:59

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Zitat:

Ich wandle, anders als du, Int64 nicht unnötigerweise in Integer um und lese Compilermeldungen.
Ich möchte hier gerne eine friedliche Diskussion führen. Was du hier machst, ist genau das Gegenteil.
Wer bitte sagt denn, dass ich keine Compilermeldungen lese? Wer bitte sagt, dass ich Int64 in Integer umwandle?

Jetzt bitte etwas zum Thema Mister Neunmalklug oder raus hier.

Ghostwalker 30. Aug 2017 03:41

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Ich persönlich verwende inzwischen 64-Bit Integer (Int64). Damit hat man diese Problem erst garnicht. Software, die noch 32-Bit Integer verwendet, würd ich entsprechend auf Int64 anpassen. Das dürfte am wenigsten Aufwand sein, ansonsten müsste man an entsprechenden Stellen eine Umwandlungsfunktion bauen, um sie in ein entsprechendes Format zu bringen.

Was ich bisher zu dem Thema im Internet gelesen habe, ist das auch die Variante, die Empfohlen wird (insbesondere auch bei Web-Apps, die ja sehr häufig mit Unixtimestamps arbeiten).

Gruß

Uwe

Uwe Raabe 30. Aug 2017 07:48

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Was spricht gegen TTimeStamp?

Abgesehen davon arbeitet Delphi bei Unix-TimeStamps doch sowieso schon mit Int64:
Delphi-Quellcode:
{ Unix date conversion support }

function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean = True): Int64;
function UnixToDateTime(const AValue: Int64; AReturnUTC: Boolean = True): TDateTime;

Der schöne Günther 30. Aug 2017 08:55

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Das sind noch über 20 Jahre. Ich weiß noch nicht einmal ob mein Kühlschrank-Inhalt bis Samstag reicht, da denke ich über das Ende des Maya-Kalenders oder Unix-Zeitstempels (wenn er signed und 32 Bit ist) ganz sicher nicht nach 8-)

Das als Antwort auf die Frage.

TiGü 30. Aug 2017 09:00

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Glados, was Himi im anderen Thread meinte, war das du für die Umwandlung zwischen Datetime und Unix-Timestamp deine eigenen Funktionen mit Integer als Datentyp nimmst.
Das ist a) sachlich falsch und b) das Rad neu erfunden.

Siehe die von Uwe erwähnten Funktionen in der System.DateUtils:

Delphi-Quellcode:
{ Unix date conversion support }

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;

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;

himitsu 30. Aug 2017 09:29

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Jupp, ich nehme auch gern für meine Variablen die Typen, welche man bei Parametern und vorallem beim Result raus bekommt ... dann wird auch nichts weggeschnitten :zwinker:

Zitat:

Zitat von Der schöne Günther (Beitrag 1379928)
Das sind noch über 20 Jahre. Ich weiß noch nicht einmal ob mein Kühlschrank-Inhalt bis Samstag reicht, da denke ich über das Ende des Maya-Kalenders oder Unix-Zeitstempels (wenn er signed und 32 Bit ist) ganz sicher nicht nach 8-)

Weißt do noch vor fast 18 Jahren, wo alle Computer auf der Welt abgestürzt sind? :lol:
Damals, in den 80er (20 Jahre vorher) dachte man auch, dass es reicht, wenn man nur die letzten 2 Dezimalstellen des Jahres speichert .... ist ja noch soooo viel Zeit :stupid:

Und sogar jetzt laufen noch sehr viele DOS-Programme, auf irgendwelchen mehr oder weniger wichtigen Systemen.


Du weißt aber, dass im Oktober 2017 der Weltuntergang ist?
Diesmal aber wirklich.

Aber falls nicht, dann 2029, wo so ein kleines Steinchen vom Himmel fällt.
Gut, damit wäre das Problem hier auch erledigt. :)

http://www.stupidedia.org/stupi/Welt...nterg.C3.A4nge
Es gab irgendwo eine Webseite mit einer zuverlässigen Liste aller Termine, aber ich glaub sie ist untergegangen ... find sie nicht mehr.

HolgerX 30. Aug 2017 09:35

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Hmm..

Zitat:

Zitat von Uwe Raabe (Beitrag 1379921)
Abgesehen davon arbeitet Delphi bei Unix-TimeStamps doch sowieso schon mit Int64:
Delphi-Quellcode:
{ Unix date conversion support }

function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean = True): Int64;
function UnixToDateTime(const AValue: Int64; AReturnUTC: Boolean = True): TDateTime;


Und dass schon seit Delphi6 (nur ohne UTC) ;)

Delphi-Quellcode:
{ Unix date conversion support }

function DateTimeToUnix(const AValue: TDateTime): Int64;
function UnixToDateTime(const AValue: Int64): TDateTime;

Glados 30. Aug 2017 10:48

AW: Das 2038-Problem: wie würdet ihr euch vorbereiten?
 
Zitat:

Software, die noch 32-Bit Integer verwendet, würd ich entsprechend auf Int64 anpassen.
Das wäre auch eine Lösung die noch ein paar Jahre hält.
Nutzt du generell Int64 überall oder nur da wo es sein muss?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.
Seite 1 von 2  1 2      

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