如何从一种日期格式转换为另一种格式?


11

我的日期格式有一个问题。我想从一种格式更改为另一种格式,反之亦然。我的日期格式是

格式1

YYYY-MM-DD

格式2

MM/DD/YYYY

我想将格式1更改为格式2,将格式2更改为格式1。


o更清楚一点,我有文件file1名称:date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..所需输出为01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000,反之亦然
AiB

正斜杠是* nix文件名中不能出现的仅有的两个字符之一...
evilsoup 2013年

Answers:


14

为此使用GNU'date'。它还会为您在其他格式之间转换(请参阅date --help参考资料以获取格式列表)。

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

更清楚地说,我具有文件file1名称:date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..所需输出为01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000,反之亦然
AiB

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名称:date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 ..所需输出为01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000,反之亦然
AiB

谢谢1_CR,经过一点修改,它现在可以正常工作了!!#!/ bin / bash echo'$ 1- $ 2- $ 3'| awk -v FS =--v OFS = /'{print $ 2,$ 3,$ 1}'data.file
AiB 2013年

@亚伯拉罕,您应该尝试使用drewbenn的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

在评论中回答有关如何更改文件名中日期格式的明确问题,请使用drewbenn gnu date方法的变体。此命令查找本地文件夹中的所有文件,并且仅将文件名通过管道传输到xargs,将date修改后的文件名替换为mv执行重命名的第二个参数。

在评估命令时,bash必须使用略微circuit回的变量替换来使用。bashdate

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.