środa, 24 lutego 2016

Szybka kowersja daty w zapisie String do typu Date

W czasie jednego ze szkoleń z obszarów Access VBA pojawiło się pytanie dot. sposobu konwersji daty przekazywanej w postaci ciągu tekstowego w układzie YYYYMMDD na układ daty YYYY-MM-DD.

Pierwsze podejście, bardzo klasyczne i naturalne, to rozebranie otrzymanego tekstu na czynniki z wykorzystaniem instrukcji Left(), Right() i Mid(), a następnie wykorzystanie funkcji DateSerial() i stworzenie z tego daty. rozwiązanie to mogło by wyglądać następująco:
1Dim DataTekstowo As String
2    DataTekstowo = "20161222"
3Debug.Print DateSerial(Left(DataTekstowo, 4), Mid(DataTekstowo, 5, 2), Right(DataTekstowo, 2))

Tymczasem okazuje się, że z pomocą funkcji Format() możemy bardzo skutecznie skrócić powyższy zapis zyskując dodatkową elastyczność. Oto przykłady:
1Dim DataTekstowo As String
2    DataTekstowo = "20161222"
3 
4'z wykorzystaniem funkcji konwersji
5Debug.Print CDate(Format(DataTekstowo, "0000-00-00"))
6 
7'działa także dla innego zapisu bazowego daty
8    DataTekstowo = "161222"
9Debug.Print CDate(Format(DataTekstowo, "0000-00-00"))

Oczywiście zachęcam do samodzielnych dalszych eksperymentów z wykorzystaniem funkcji Format.

Brak komentarzy:

Prześlij komentarz