如何从命令行更改日期格式?

时间:2008-11-10 22:01:28

标签: command-line date format

以一种格式转换日期的最快捷方式是什么,比如

  

2008-06-01

到另一种格式的日期,比如说

  

Sun 2008年6月1日

重要的一点实际上是'太阳',因为根据日期名称,我可能需要以非确定性的方式摆弄其他东西。我正在运行GNU bash,版本3.2.17(1)-release(i386-apple-darwin9.0)。

[背景:我想从命令行执行此操作的原因是,我真正想要的是将其写入TextMate命令...这是一项烦人的任务,我必须一直在textMate中完成。 ]

6 个答案:

答案 0 :(得分:8)

$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30

有关其他格式选项,请参阅man date

此选项在Linux上可用,但在Darwin上不可用。在Darwin中,您可以使用以下语法:

date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"

-f参数指定输入格式,+参数指定输出格式。

正如下面另一张海报所指出的,你最好使用%u(数周日)而不是%a来避免本地化问题。

答案 1 :(得分:1)

阅读 date(1)联机帮助页会显示:

-j   Do not try to set the date.  This allows you to use the -f flag
     in addition to the + option to convert one date format to another.

答案 2 :(得分:1)

谢谢你的sgm。所以我可以回来参考它 -

date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y"
            ^               ^        ^
            parse using     |        output using
            this format     |        this format
                            |
                       date expressed in
                       parsing format

Thu 3 Jan 2008

感谢。

答案 3 :(得分:0)

date -d yyyy-mm-dd

如果您想要更多地控制格式,您也可以像这样添加:

date -d yyyy-mm-dd +%a

直接得到你想要的太阳部分。

答案 4 :(得分:0)

date -d ... 

似乎没有削减它,因为我收到了一个使用错误:

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

我正在运行GNU bash,版本3.2.17(1)-release(i386-apple-darwin9.0),就男人而言,日期-d仅适用于

-d dst  Set the kernel's value for daylight saving time.  If dst is non-
         zero, future calls to gettimeofday(2) will return a non-zero for
         tz_dsttime.

答案 5 :(得分:0)

如果您只是希望获得一周中的某一天,请不要尝试匹配字符串。当语言环境发生变化时会中断。 %u格式为您提供日期编号:

 $ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
 4

事实上,那是星期四。您可以使用该数字索引到程序中的数组,或者只使用数字本身。

有关详细信息,请参阅date和strftime手册页。但是OS X上的日期联机帮助页是错误的,因为它没有列出这些有用的选项。