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
Last revision Both sides next revision
vba:cast:strtodate [29.09.2015 10:55:34]
yaslaw
vba:cast:strtodate [28.04.2017 09:22:36]
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=2.3.2 +    version=2.5.0 
-    vdate=29.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>​ 
 + 
 +=== abc === 
 +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 142: Line 172:
 Bei Formaten mit Wochentage und Wochennummer ist es entscheidend,​ was als Erste Woche des Jahres gerechnet wird und mit welchem Tag die Woche beginnt. 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 <code vb>'​Zweiter Wochentag in der 3ten Woche im Jahr 2015 nach Systemeinstellungen Schweiz
-strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY"​)+print_r  ​strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY"​)
 <​Date>​ 13.01.2015 <​Date>​ 13.01.2015
  
 '​Dasselbe wenn die Erste Woche als die erste Volle Woche gerechnet wird '​Dasselbe wenn die Erste Woche als die erste Volle Woche gerechnet wird
-strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,,​vbFirstFullWeek)+print_r  ​strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,,​vbFirstFullWeek)
 <​Date>​ 20.01.2015 <​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) 'Und dann noch di Ienstellung,​ dass der erste tag in der Woche der Sonntag ist (ja, das gibt es in gewissen Ländern)
-strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,​vbSunday,​vbFirstFullWeek)+print_r  ​strToDate("​2/​3/​2015",​ "​W/​WW/​YYYY",,​vbSunday,​vbFirstFullWeek)
 <​Date>​ 19.01.2015</​code>​ <​Date>​ 19.01.2015</​code>​
  
vba/cast/strtodate.txt · Last modified: 28.04.2017 09:33:17 by yaslaw