2015-01-02 8 views
10

Próbuję przekonwertować wartość sygnatury czasowej pliku na datę w celu porównania dwóch różnic w datach.Konwersja ciągu na DateTime w programie PowerShell

Dane będą podawane w formacie 24122014_022257. Muszę przekonwertować to na datę, aby móc porównać wartości:

$usdate="24122014_022257" 
$dateParts = $usdate -split "_" 
$final = $dateparts[0] + $dateParts[1] 

Jak mogę to zrobić?

Odpowiedz

18

Można użyć metody ParseExact:

[datetime]::ParseExact('24122014_022257','ddMMyyyy_HHmmss',$null) 

Wednesday, December 24, 2014 2:22:57 AM 
+5

Wykorzystanie '[Globalization.CultureInfo] :: InvariantCulture' zamiast' $ null'. Ten drugi wywoła błąd, jeśli na przykład ciąg formatu ma oznaczenie AM/PM, podczas gdy regionalne ustawienia systemu nie. –

+1

Zazwyczaj po prostu dodaje się specyfikator "tt" do ciągu formatu, jeśli konwertuję dane, które korzystają ze specyfikatorów AM/PM. – mjolinor

+1

Nie widzę sensu dodawania opcji radzenia sobie z różnicami kulturowymi w projektach AM/PM wykonujących ParseExact na ciągach, które nie mają tego oznacznika. – mjolinor

8

ParseExact zrobi tylko to. Możesz określić niestandardowy format datetime w drugim parametrze. Możesz zostawić trzeci parametr jako wartość null lub określić kulturę do użycia (może to mieć znaczenie, jeśli importujesz pliki, które zostały wygenerowane z systemu z inną strefą czasową).

$usdate="24122014_022257" 
[datetime]::ParseExact($usdate,"ddMMyyyy_HHmmss", [System.Globalization.CultureInfo]::CurrentCulture) 
2

get-date 24122014022257

Środa, 24 grudnia 2014 02:22:57