Bagaimana cara mengubah dari satu format tanggal ke format lainnya?

11

Saya punya satu masalah dengan format tanggal saya. Saya ingin mengubah dari satu format ke format lainnya dan sebaliknya. Format tanggal saya adalah

Format 1

YYYY-MM-DD

Format 2

MM/DD/YYYY

Saya ingin mengubah format 1 ke format 2 dan format 2 ke format 1.

AiB
sumber
o lebih jelas, saya memiliki file file1 nama: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Output yang diperlukan adalah 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 dan sebaliknya
AiB
Garis miring ke depan adalah salah satu dari dua karakter yang tidak boleh berada dalam nama file * nix ...
evilsoup

Jawaban:

14

Gunakan 'tanggal' GNU untuk ini. Ini juga akan mengkonversi antara format lain untuk Anda (lihat date --helpdaftar format).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Stéphane Chazelas
sumber
untuk lebih jelas, saya memiliki nama file file1: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Output yang diperlukan adalah 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 dan sebaliknya
AiB
1
@Abraham bagaimana ini tidak memenuhi persyaratan itu?
jordanm
6

Dengan asumsi Anda memiliki tanggal dalam bentuk teks yang perlu dikonversi

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

Dan sebaliknya

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
iruvar
sumber
untuk lebih jelas, saya memiliki nama file file1: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Output yang diperlukan adalah 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 dan sebaliknya
AiB
Terima kasih 1_CR, Ini berfungsi sekarang setelah saya memodifikasi sedikit !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' data.file
AiB
@Abraham, Anda harus mencoba keberuntungan Anda dengan datependekatan drewbenn , yang tentu saja lebih elegan
iruvar
3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

Jika Anda memiliki file dengan banyak tanggal tersebut, satu per baris:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Stéphane Chazelas
sumber
0

Menggunakan sed sebagai berikut:

$ 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
mark_infinite
sumber
0

Menjawab pertanyaan yang diklarifikasi dalam komentar tentang bagaimana mengubah format tanggal dalam nama file, gunakan varian gnu datependekatan drewbenn . Perintah ini menemukan semua file di folder lokal, dan pipa hanya nama file untuk xargs, mengganti datenama file yang dimodifikasi sebagai argumen kedua mvyang melakukan penggantian nama.

Penggunaan bashsubstitusi variabel tambahan yang sedikit berputar diperlukan saat bashmengevaluasi dateperintah.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
rampok
sumber