如何在OS X上使用从2011年3月1日到2011-03-01的shell转换

时间:2016-07-07 18:33:47

标签: macos shell date

我想知道如何在OS X上使用 01 / Mar / 2011 的shell转换为 2011-03-01

在我的bash中:

bash-3.2$ date -d "03 Mar 2011" +%F
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

感谢@ghoti,在OS X上应该使用:

date -j -f '%d %b %Y' "02 JUN 2011" '+%F'
Failed conversion of ``02 JUN 2011'' using format ``%d %b %Y''
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

但是,我的系统显示> date +%b 7%b是一个数字,而不是缩写的月份名称。

感谢。

2 个答案:

答案 0 :(得分:1)

使用BSD日期,您可以使用-f选项将一种格式转换为另一种格式。

例如,将输入放入变量中,以便您可以看到如何重复使用此日期命令:

$ d="27 JUN 2011"
$ date -j -f '%d %b %Y' "$d" '+%F'
2011-06-27

您可以man date查看一切是如何运作的,但基本知识是这样的;

  • -j告诉命令只处理输入而不是尝试设置系统时钟。
  • -f this that使用this作为输入格式来解释that
  • +yadda使用指定的输出格式打印解释日期。

有关输入格式的详细信息,在OS X或大多数BSD上,您可以man strftime

答案 1 :(得分:0)

我们的想法是将日期STRING转换为纪元时间,然后将其输出为您想要的格式。

我在Cygwin和CentOS上测试过它。

将日期STRING转换为纪元时间

使用命令'date -d STRING +%s',STRING可以是2011年3月1日或2011年3月1日或2011年3月1日

date -d '01 Mar 2011' +%s
1298908800

输出纪元时间格式

使用命令'date -d @EPOCH_TIME'+%Y-%m-%d'

date -d @1298908800 '+%Y-%m-%d'
2011-03-01

因为您的日期STRING 01 / Mar / 2011不是日期-d的有效格式,所以您必须使用'sed'进行转换。

echo "01/Mar/2011"|sed -e 's/\// /g'
01 Mar 2011

所以您的解决方案可以

old_date="01/Mar/2011"

date_string=`echo "$old_date"|sed -e 's/\// /g'`

echo $date_string
01 Mar 2011

epoch_time=`date -d "$date_string" +%s`

echo $epoch_time
1298908800

date -d @$epoch_time '+%Y-%m-%d'
2011-03-01