2011-08-12 18 views
5

Próbuję przekonwertować ciąg w formacie daty, takich jak "Aug 12/11" .. do "RRRR-MM-DD", który w tym przykładzie byłby "2011-08-12" .Format daty Perl/regex konwertuje

Jaki byłby najlepszy perl/regex do użycia w tej konwersji? Byłem w stanie to zrobić, parsując każdy i konwertując go ręcznie .. ale domyślam się, że istnieje szybszy sposób, aby to zrobić z perl/regex. Dzięki.

Odpowiedz

4

Nie polecałbym samodzielnego analizowania dat, szczególnie próbując wymyślić jedno lub dwa wyrazy regularne. Istnieje wiele istniejących modułów Perla, takich jak Date::Manip. Twoje wiele opcji jest rozsądnie objętych in this article.

+2

+1 dla "Data :: Manip". Najlepiej użyć biblioteki zaprojektowanej do tego celu, a nie próbować samodzielnie omówić każdą sprawę krawędzi. –

+0

Mój host nie ma Data :: Manip i nie mam uprawnień do zainstalowania tego modułu :(.. dlatego szukam rozwiązania do wyrażenia regularnego .. – simbatish

+0

@ sim Czy masz zainstalowany DateTime? – TLP

2

Czas :: Kawałek jest od dłuższego czasu modułem podstawowym, ma możliwość analizowania ciągu znaków w obiekcie Czas :: Kawałek, który może następnie sformatować dla Ciebie w 10 różnych formatach gazillion. Jeśli Time :: Piece nie jest zainstalowany, spróbuj wyszukać niektóre z setek modułów daty, które można zobaczyć na cpan. (użyj jednej linijki: perl -e "użyj modułu :: IHope :: IsHere || die \" Nie znaleziono \ '").

`Time::Piece->strptime(STRING, FORMAT) 
         # see strptime man page. Creates a new 
         # Time::Piece object` 

W przeciwnym razie rozpocznę instalowanie modułów w moim katalogu domowym.