Oto następujący problem. Z pliku pobieramy dane, które dalej mają być przesłane do bazy danych. Niestety niektóre dane w pliku są nieprawidłowe. Np. data 2016-02-31 …
Jak sobie z tym poradzić?
[System.DateTime]$d = Get-Date [bool]$isDate = [System.DateTime]::TryParse('2016-02-31',[ref]$d) if($isDate) { Write-Host "It is a date" } else { Write-Host "It is not a date" }
O co chodzi i dlaczego właśnie takie kroki są potrzebne?
- Deklarujemy zmienna typu DateTime. Aby zmienna rzeczywiście powstała, musi być zainicjowana wartością. Mogła to być dowolna wartość, więc np. bieżąca data
- Typ DateTime posiada statyczną metodę TryParse, która próbuje konwertować napis na zmienną typu DateTime. Funkcja TryParse przyjmuje 2 argumenty: napis do skonwertowania i zmianną, gdzie zostanie zapisana skonwertowana data. Ta zmienna musi być przekazywana przez referencję stąd zapis [ref]. Przekazywanie parametru przez referencję pozwala funkcji zmodyfikować wartość zmiennej, która istnieje na zewnątrz ciała tej funkcji.
- TryParse zwraca $true, jeżeli konwersja się powiodła (i wtedy zmienna $d zawiera wartość daty) lub $false, jeżeli konwersja się nie powiodła (i tedy zmienna zawiera umowną wartość 0001-01-01).