Thema Datum  Von Nutzer Rating
Antwort
30.08.2024 13:56:19 Dominika
NotSolved
30.08.2024 14:47:17 Gast31384
NotSolved
02.09.2024 08:16:15 Gast59600
NotSolved
Blau leichtfertiger Umgang mit Datentyp: Date
05.09.2024 15:07:02 Gast86153
NotSolved
06.09.2024 07:59:40 Mase
NotSolved

Ansicht des Beitrags:
Von:
Gast86153
Datum:
05.09.2024 15:07:02
Views:
27
Rating: Antwort:
  Ja
Thema:
leichtfertiger Umgang mit Datentyp: Date

Der Umgang mit dem Datentyp Date wird von vielen meistens sehr leichtfertig gehandhabt, deshalb möchte ich hier mal auf etwas hinweisen:

Option Explicit

Public Sub Demo_BestPractice()
  
  Dim dtm As Date
  
' dtm = DateSerial(2024, 9, 5)                          ' #9/5/2024#
' dtm = DateSerial(2024, 9, 5) + TimeSerial(14, 30, 0)  ' #9/5/2024 2:30:00 PM#
' dtm = TimeSerial(14, 30, 0)                           ' #2:30:00 PM#
  
  Debug.Print "[Bad Practice]"
  
  dtm = #9/5/2024# + 5
  Debug.Print "Date-only:"; Tab(14); dtm
  
  dtm = #9/5/2024 2:30:00 PM# + 5
  Debug.Print "DateTime: "; Tab(14); dtm
  
  dtm = #2:30:00 PM# + 5                        ' !! potential issue
  Debug.Print "Time-only: "; Tab(14); dtm
  
  Debug.Print
  Debug.Print "[Better/Best Practice]"
  
  dtm = DateAdd("d", 5, #9/5/2024#)
  Debug.Print "Date-only:"; Tab(14); dtm
  
  dtm = DateAdd("d", 5, #9/5/2024 2:30:00 PM#)
  Debug.Print "DateTime: "; Tab(14); dtm
  
  dtm = DateAdd("h", 5, #2:30:00 PM#)           ' !! clearly defiend -> ok
  Debug.Print "Time-only: "; Tab(14); dtm
  
End Sub

Der Datentyp Date kann entweder ein reines Datum darstellen, ein Datum mit Zeitangabe, oder nur eine reine Zeitanagabe. Addiert man zu diesem einen numerischen Wert, dann findet eine automatische Typ-Konvertierung statt, an derem Ende dann per Definition der Wert als Tage (der ganzzahlige Anteil) interpretiert wird. Soweit ok. Einfach so zu addieren kann bei reinen Zeitangaben jedoch ein Problem werden. Entweder weiß man das vom Kontext her, oder man sollte es vorher zumindest mal mit - zum Beispiel - DateValue() geprüft haben. Allgemein würde ich Neulingen immer zu DateAdd() raten, denn damit ist es eindeutig was man mit der Codezeile gemeint ist.

[Bad Practice]
Date-only:   10.09.2024 
DateTime:    10.09.2024 14:30:00 
Time-only:   04.01.1900 14:30:00 ' !! falsch

[Better/Best Practice]
Date-only:   10.09.2024 
DateTime:    10.09.2024 14:30:00 
Time-only:   19:30:00            ' ok, wie beabsichtigt

Wenn man genau weiß, was man tut, kann man von mir aus den leichtfertigen Weg gehen, aber jemanden dies direkt als Lösung oder als Ratschlag zu präsentieren, finde ich nicht in Ordnung.

 

Grüße

PS: So etwas wie DateSubstract() gibt es nicht, weil dies DateAdd() mit negativen Wert mit abdeckt.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
30.08.2024 13:56:19 Dominika
NotSolved
30.08.2024 14:47:17 Gast31384
NotSolved
02.09.2024 08:16:15 Gast59600
NotSolved
Blau leichtfertiger Umgang mit Datentyp: Date
05.09.2024 15:07:02 Gast86153
NotSolved
06.09.2024 07:59:40 Mase
NotSolved