AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TDateTime Rechnungen über 0 ('30.12.1899 00:00')
Thema durchsuchen
Ansicht
Themen-Optionen

TDateTime Rechnungen über 0 ('30.12.1899 00:00')

Ein Thema von SebastianZ · begonnen am 5. Mär 2015 · letzter Beitrag vom 5. Mär 2015
Antwort Antwort
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#1

TDateTime Rechnungen über 0 ('30.12.1899 00:00')

  Alt 5. Mär 2015, 11:05
Delphi-Version: XE7
Hallo Zusammen,

ich bin über eine interessante Eigenheit vom des TDateTime - Formats gestoßen:

Wenn ein Datum < '30.12.1899' , also intern 0 ist, verhält sich der Wert des Datums gespiegelt zu den Werten > 0 (Wie auch in der Dokumentation beschrieben)
Was zur Folge hat das, vom Datum her -0,5 = 0,5 = '30.12.1899 12:00' ist.

Für mich ist der Umstand das es hier gespiegelt und nicht chronologisch im Datumsformat weiter geht unlogisch und führt bei Rechenoperationen die den 0 - Wert über bzw unterschreiten zu Problemen (Wenn vom '31.12.1899 00:00' 1,5 Tage abgezogen werden, kommt der '30.12.1899 12:00' heraus)

Wie ist hier, eurer Meinung nach, der korrekte Weg um solche Berechnungen richtig abzubilden?

PS.: Im Anhang ist ein kleines Test - Projekt, mit dem Konvertierungen zwischen Float und Datetime durchgeführt werden, damit wird auch relativ schnell sichtlich, dass -0,5 und +0,5 in TDatetime das "selbe" sind.
Angehängte Dateien
Dateityp: zip encodetest.zip (2,7 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TDateTime Rechnungen über 0 ('30.12.1899 00:00')

  Alt 5. Mär 2015, 11:09
http://docwiki.embarcadero.com/Libra...stem.TDateTime

Zitat:
TDateTime supports negative values too. The negative spectrum mirrors the positive one exactly. As such, a value of Now (positive) is exactly the same as its negative value--Now. You should use negative TDateTime values with care. Incorrect use of negative values can lead to various problems.
Zitat:
When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 A.M. on December 29, 1899 is –1.25, not –1 + 0.25, which would equal –0.75. There are no TDateTime values from –1 through 0.

Wenn du solche wilden Datumsbereiche betrittst würde ich persönlich mir das nicht antun und ein eigenes Datumsformat und nicht TDateTime nehmen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: TDateTime Rechnungen über 0 ('30.12.1899 00:00')

  Alt 5. Mär 2015, 11:18
Wenn du solche wilden Datumsbereiche betrittst würde ich persönlich mir das nicht antun und ein eigenes Datumsformat und nicht TDateTime nehmen.
TFileTime, TSystemTime, TTimeStamp, TTimeSpan uvm.

Aber wenn man sich selber nicht mit dem Datenformat beschäftigen will/kann, dann nimmt man eben Delphi-Referenz durchsuchenIncMinute, Delphi-Referenz durchsuchenMinutesBetween, Delphi-Referenz durchsuchenDateUtils usw.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Mär 2015 um 11:21 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TDateTime Rechnungen über 0 ('30.12.1899 00:00')

  Alt 5. Mär 2015, 11:23
Bei der Gelegenheit noch einmal:

Möchte jemand die Behandlung jetzt noch auf verschiedene Zeitzonen erweitern?
Lieber nicht
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: TDateTime Rechnungen über 0 ('30.12.1899 00:00')

  Alt 5. Mär 2015, 11:55
WINDOWS.SYSTEMTIME

https://msdn.microsoft.com/en-us/lib...or=-2147217396

wYear: The year. The valid values for this member are 1601 through 30827.
  Mit Zitat antworten Zitat
Antwort Antwort


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