Як конвертувати з одного формату дати в інший формат?


11

У мене є одна проблема з форматом дати. Я хочу перейти від одного формату до іншого і навпаки. Мої формати дати є

Формат 1

YYYY-MM-DD

Формат 2

MM/DD/YYYY

Я хочу змінити формат 1 на формат 2 і формат 2 на формат 1.


o бути більш зрозумілим, у мене є файл file1 name: дата 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Необхідний вихід 01 / 01.2000 01/02/2000 01/03 /
2000/02/2000

Штрихи вперед - один з єдиних двох символів, який не може бути у
файлі

Відповіді:


14

Використовуйте для цього «дату» GNU. Він також конвертуватиме між вами інші формати (див date --help. Список форматів).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

щоб бути більш зрозумілим, у мене є файл file1 name: дата 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Необхідний вихід 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 та віце-
версал

1
@Abraham, як це не відповідає цій вимозі?
jordanm

6

Припустимо, що у вас є дати у текстовій формі, які потрібно перетворити

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

І навпаки

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

щоб бути більш зрозумілим, у мене є файл file1 name: дата 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Необхідний вихід 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 та віце-
версал

Дякую 1_CR, він працює зараз після того, як я трохи змінив !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' data.file
AiB

@Abraham, ти повинен спробувати свою удачу з підходом Дрюбенна date, що, безумовно, більш елегантно
iruvar

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

Якщо у вас є файл із великою кількістю цих дат, по одному на рядок:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

Використання sed наступним чином:

$ 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

0

Відповідаючи на уточнене запитання у коментарях про те, як змінити формат дати у назві файлу, використовуйте варіант gnu dateпідходу drewbenn . Ця команда знаходить всі файли в локальній папці і передає лише ім'я файлу xargs, замінюючи dateзмінене ім'я файлу як другий аргумент, mvякому виконується перейменування.

Додаткове, злегка контурне використання bashзмінної підстановки необхідне при bashоцінці dateкоманди.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.