Powershell: Sprawdzenie czy napis zawiera datę

1-cze-2016

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).

Komentarze są wyłączone

Autor: Rafał Kraik