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.


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

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}'

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

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

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)' -- {} \;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.