Bash - 日期不承认英国格式(年/月/日)

时间:2013-01-14 16:37:06

标签: bash date format

我有一个文本文件,其中包含dd/mm/yyyy格式的以下日期:

14/09/1992
15/04/1983
15/09/1961
02/06/1979
14/12/1971
08/02/2001
19/06/1999
14/09/1969
31/08/2002
30/07/1980
25/04/1973
03/01/1992

我想在脚本中将其转换为YYYY/mm/dd格式。我打算使用date命令:

date -f tempDate +%Y/%m/%d

但问题是,它无法识别英式日期,并显示以下错误,因为我认为它是mm/dd/yyyy,当我不想要它时:

date: invalid date `14/09/1992'

还有另一种方法吗?或者有没有办法可以改变日期格式的顺序?

另外,我需要这个脚本在我不是系统管理员的服务器上工作。

5 个答案:

答案 0 :(得分:4)

您可以使用快速awk脚本更改为年/月/日订单:

 awk -F '/' '{print $3"/"$2"/"$1}' < file.txt

答案 1 :(得分:3)

如果文件如上所述,为什么不只是用awk反转列:

$ awk 'BEGIN{FS=OFS="/"}{print $3,$2,$1}' file
1992/09/14
1983/04/15
1961/09/15
1979/06/02
1971/12/14
2001/02/08
1999/06/19
1969/09/14
2002/08/31
1980/07/30
1973/04/25
1992/01/03

修改

在具有多个字段分隔符的awk中同样容易:

$ awk -F[/,] '{print $1","$2","$5"/"$4"/"$3}' <<< "name,number,14/09/1992"
name,number,1992/09/14

答案 2 :(得分:2)

至少在Mac OS X上,迄今为止-f选项记录为:

  

-f使用input_fmt作为格式字符串来解析提供的new_date而不是使用默认值                [[[mm]dd]HH]MM[[cc]yy][.ss]格式。使用strptime(3)完成解析。

因此,您应该使用:

date -f '%d/%m/%Y' +'%Y-%m-%d' ...

然而,剩余问题是转换多个值;你需要多次date的调用,所以你想尝试类似的东西:

# Bogus code
while read date                                   # Bogus code
do date -f '%d/%m/%Y' $date +'%Y-%m-%d'           # Bogus code
done < tempDate                                   # Bogus code
# Bogus code

然而,这会尝试设置系统时钟(除非您当时root,否则不会非常成功,并且您在进行实验时不应该root。因此,没有一种明显的方法可以让date命令执行您想要的操作。

因此,使用awksedperlpython和正则表达式来回答日期的答案是可行的方法。

答案 3 :(得分:1)

国际标准日期格式ISO 8601为YYYY-MM-DD,而非YYYY/MM/DD。我建议使用它,除非你有充分的理由不这样做。

美国和英国的日期格式对于每月13日之前的日期都不明确,因此date无法识别日期并不奇怪。有一种方法可以告诉它给定的字符串是英国格式,但我不知道它是什么。

您可以使用sed或任何其他进行正则表达式替换的工具来更改格式:

$ echo 14/09/1992 | sed 's/\([0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9][0-9][0-9][0-9]\)/\3-\2-\1/'
1992-09-14

Perl可以更简洁地做到这一点:

$ echo 14/09/1992 | perl -pe 's/(\d\d)\/(\d\d)\/(\d\d\d\d)/$3-$2-$1/'
1992-09-14

或:

$ echo 14/09/1992 | perl -pe 's/(\d{2})\/(\d{2})\/(\d{4})/$3-$2-$1/'
1992-09-14

答案 4 :(得分:0)

如果您使用的是Windows,您还可以更改区域设置以更改整个计算机上的日期格式,尤其是.csv文件:

Win7的:

1. /转到“开始”按钮 2. /选择控制面板 3. /时钟,语言和地区。 4. /更改日期,时间和数字格式。