User Tools

Site Tools


vba:cast:strtodate

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:cast:strtodate [29.09.2015 10:05:03]
yaslaw
vba:cast:strtodate [28.04.2017 09:33:17] (current)
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.3.1 +    version=2.5.0 
-    vdate=07.09.2015+    vdate=15.03.2016
     fname=cast_strtodate.bas     fname=cast_strtodate.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
Line 16: Line 16:
 generierten Pattern in ein privates Dictionary-Objekt gespeichert. Das führt zu einer erheblichen ​ generierten Pattern in ein privates Dictionary-Objekt gespeichert. Das führt zu einer erheblichen ​
 Geschwindigkeitsverbesserung bei der Anwendung innerhalb eines SQL-Statements Geschwindigkeitsverbesserung bei der Anwendung innerhalb eines SQL-Statements
 +
 +> siehe auch [[vba:​classes:​date:​datetime:​index]]
 ===== Definition ===== ===== Definition =====
 <​code>​date = strToDate(string [,format [,​parameters [,erster Tag der Woche [,erste Woche des Jahres [,​nanosekunden]]]]])</​code>​ <​code>​date = strToDate(string [,format [,​parameters [,erster Tag der Woche [,erste Woche des Jahres [,​nanosekunden]]]]])</​code>​
Line 42: Line 44:
     tdtExtractDate = 2 ^ 1  'Der String beimnhaltet vor oder nach dem Datum noch andere Werte. Das Datum wird extrahiert     tdtExtractDate = 2 ^ 1  'Der String beimnhaltet vor oder nach dem Datum noch andere Werte. Das Datum wird extrahiert
     tdtIgnoreError = 2 ^ 2  '​Fehler werden ignoriert. Im Fehlerfall wird NULL zurückgegeben     tdtIgnoreError = 2 ^ 2  '​Fehler werden ignoriert. Im Fehlerfall wird NULL zurückgegeben
 +    tdtFomat2 = 2 ^ 3       '​Es handelt sich um ein Format im Stil von {$DD}.{$MM}
 End Enum</​code>​ End Enum</​code>​
  
Line 52: Line 55:
 | yy  | zweistelliges oder vierstelliges Jahr | | yy  | zweistelliges oder vierstelliges Jahr |
 | yyyy  | vierstelliges Jahr | | yyyy  | vierstelliges Jahr |
 +| q | QuartalAnfang (1.1.x - 1.10.x) |
 +| qq | QuartalEnde ​  ​(31.3.x - 31.12.x)|
 | h | Stunden ohne führende Null(0-24) | | h | Stunden ohne führende Null(0-24) |
 | hh  | Stunden mit führende Null(00-24) | | hh  | Stunden mit führende Null(00-24) |
Line 107: Line 112:
 'nur die Zeit 'nur die Zeit
 print_r strToDate("​17:​6:​65",​ "​h:​n:​s"​) print_r strToDate("​17:​6:​65",​ "​h:​n:​s"​)
-<​Date>​ 17:​07:​05</​code>​+<​Date>​ 17:07:05 
 + 
 +'​Quartalsanfang 
 +print_r strToDate("​Q3 2015", "\QQ YYYY"​) 
 +<​Date>​ 01.07.2015 
 + 
 +'Und das Quartalsende 
 +print_r strToDate("​Q3 2015", "\QQQ YYYY"​) 
 +<​Date>​ 30.09.2015 
 +</​code>​ 
 + 
 +=== Länder Formatchaos === 
 +Ein Datum kann je nach Land unterschiedlich geschrieben werden. Dass kann zu Fehler führen. Nehmen wir das Amerikanische Format MM/DD/YYYY. In der Schweiz und in Deutschland haben wir DD.MM.YYYY. VBA nimmt die Ländereinstellung vom PC-Profil. Wenn der Tag kleiner oder gleich 12 ist, dann haben wir ein Problem. Dann erkennt VBA den Tag als Monat und das Resultat ist Falsch. 
 +\\ Als Beispiel der 5. Januar 2017. Im Amerikanischen Format 01/05/2017. cDate mit Schweizer Einstellung macht daraus den 1. Mai 2017. 
 +<code vb>'​Einfacher cDate. Der Tag ist Kleinergleich als 12. Das Resultat ist falsch 
 +print_r cDate("​01/​05/​2017"​) 
 +<​Date>​ 01.05.2017 
 + 
 +'Wenn die zweite Position über 12 ist, erkennt VBA, dass es sich um den Tag handeln muss 
 +print_r cDate("​01/​15/​2017"​) 
 +<​Date>​ 15.01.2017 
 + 
 + 
 +'Mit strToDate und einem definierten Format wird das Datum richtig umgesetzt 
 +print_r strToDate("​01/​05/​2017",​ "​MM/​DD/​YYYY"​) 
 +<​Date>​ 05.01.2017</​code>​
  
 === Unklare Formate === === Unklare Formate ===
Line 138: Line 168:
 print_r strToDate("​Heute ist der 1te des 12ten Monats 2014", "dte \de\s mte\n \mo\nat\s yyyy", tdtExtractDate + tdtIgnoreCase) print_r strToDate("​Heute ist der 1te des 12ten Monats 2014", "dte \de\s mte\n \mo\nat\s yyyy", tdtExtractDate + tdtIgnoreCase)
 <​Date>​ 01.12.2014</​code>​ <​Date>​ 01.12.2014</​code>​
 +
 +=== FirstDayOfWeek und FirstWeekOfYear ===
 +Bei Formaten mit Wochentage und Wochennummer ist es entscheidend,​ was als Erste Woche des Jahres gerechnet wird und mit welchem Tag die Woche beginnt.
 +<code vb>'​Zweiter Wochentag in der 3ten Woche im Jahr 2015 nach Systemeinstellungen Schweiz
 +print_r ​ strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY"​)
 +<​Date>​ 13.01.2015
 +
 +'​Dasselbe wenn die Erste Woche als die erste Volle Woche gerechnet wird
 +print_r ​ strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,,​vbFirstFullWeek)
 +<​Date>​ 20.01.2015
 +
 +'Und dann noch di Ienstellung,​ dass der erste tag in der Woche der Sonntag ist (ja, das gibt es in gewissen Ländern)
 +print_r ​ strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,​vbSunday,​vbFirstFullWeek)
 +<​Date>​ 19.01.2015</​code>​
  
 === Extraktion von Nanosekunden === === Extraktion von Nanosekunden ===
vba/cast/strtodate.1443513903.txt.gz · Last modified: 29.09.2015 10:05:03 by yaslaw