Mam jeden problem z formatem daty. Chcę zmienić z jednego formatu na drugi i odwrotnie. Moje formaty dat to
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Chcę zmienić format 1 na format 2 i format 2 na format 1.
Mam jeden problem z formatem daty. Chcę zmienić z jednego formatu na drugi i odwrotnie. Moje formaty dat to
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Chcę zmienić format 1 na format 2 i format 2 na format 1.
Odpowiedzi:
Użyj do tego „daty” GNU. Konwertuje również inne formaty dla ciebie (zobacz date --help
listę formatów).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Zakładając, że masz daty w formie tekstowej, które należy przekonwertować
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
I wzajemnie
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
date
podejściem drewbenna , które z pewnością jest bardziej eleganckie
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Jeśli masz plik z wieloma datami, po jednym w wierszu:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Używając sed w następujący sposób:
$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13
Odpowiadając na wyjaśnione pytanie w komentarzach na temat zmiany formatu daty w nazwie pliku, skorzystaj z wariantu gnu date
podejścia Drawbenna . To polecenie znajduje wszystkie pliki w folderze lokalnym i przesyła do nazwy tylko nazwę pliku xargs
, zastępując date
zmodyfikowaną nazwę pliku drugim argumentem, na mv
który wykonuje się zmiana nazwy.
Dodatkowe, nieco okrężne stosowanie bash
zmiennego podstawiania jest konieczne podczas bash
oceny date
polecenia.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;