This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:cast:strtodate [05.10.2015 09:21:17] yaslaw |
vba:cast:strtodate [28.04.2017 09:33:17] (current) 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 44: | 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 54: | 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 109: | 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 === |