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

4
什么是将日期从一种格式快速转换为另一种格式的最快方式,例如

2008-06-01

转换为

Sun 1st June 2008

。重要的部分实际上是“Sun”,因为根据星期几,我可能需要以非确定性的方式调整其他内容。我正在运行 GNU bash,版本为 3.2.17(1)-release (i386-apple-darwin9.0)。[背景: 我想要在命令行中执行此操作的原因是,我真正想要的是将其编写成TextMate命令...这是我在TextMate中经常需要做的烦人任务。]
6个回答

9
$ 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,以避免本地化问题。

2

如果阅读date(1)手册,将会了解到:

-j   不要尝试设置日期。这使您可以在使用 + 选项将一个日期格式转换为另一种格式之外,还使用 -f 标志。

实际上,在OS X中,您不会在date(1)手册中看到这个。 - brian d foy
苹果公司似乎有些问题。 - Jay Mooney
真的吗?评论系统使用的标记语言与答案不同? - Jay Mooney
哎呀,苹果在线上的手册和安装在电脑里的不一样。我也发现其他工具也是这样。 - brian d foy

1

感谢您提供的信息。为了方便以后查阅,我会保存下来。

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

谢谢。


0
date -d yyyy-mm-dd

如果您想更多地控制格式,也可以像这样添加:
date -d yyyy-mm-dd +%a

只需获取您所需的Sun部分。


抱歉 - 我刚才使用时出现了错误。运行的是GNU bash,版本为3.2.17(1)-release (i386-apple-darwin9.0)。 - Dycey
这在我的Debian机器上可以运行。显然,在Mac上不行。抱歉。 - bdumitriu

0

如果你只是想获取星期几,不要尝试匹配字符串。当语言环境改变时,这种方法会失效。使用%u格式可以获取星期几的数字:

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

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

有关更多详细信息,请参阅日期和strftime手册页面。但是,在OS X上的日期man页是错误的,因为它没有列出这些可用选项。


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),就man而言,date -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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接