UNIX - 昨天的日期格式

时间:2012-01-10 10:59:47

标签: unix date format

我知道这个网站上的其他地方有一些答案,但其他人可以帮助我以 yyyymmdd 的格式提供我的约会,当我使用我在不同论坛上找到的任何内容时,我只是得到了 yyyymmd ,我的剧本在本月的前9天失败了......

我目前使用的脚本使用bash并使用

获取日期
date '+%m %d %Y'

但是,今天返回 20120110 ,但昨天它返回 2012019 ,我需要此返回 201201 * 0 * 9

有什么想法吗?

由于

P.S。我无法在此服务器上安装任何其他内容,因此gnu或perl已经出局。

4 个答案:

答案 0 :(得分:4)

您是否尝试过:date +%Y%m%d

$ date +%Y%m%d
20120110

$ date -d yesterday +%Y%m%d
20120109

答案 1 :(得分:1)

您对date的来电实际上工作正常。

真正的问题是,在你的bash脚本中(在另一个答案的注释中)你正在对结果值执行一些算术运算,这些值的后续连接会丢失前导零。

因此,在您的bash脚本中,在计算了$YEAR$MONTH$DAY的新值后,使用此值来获取正确的输出文件名:

SOURCEFILE=`printf "DNXOUT-%04d%02d%0d2.txt" $YEAR $MONTH $DAY`

即。只需使用printf命令行可执行文件(可能存在)来格式化文件名。

答案 2 :(得分:0)

如果您使用的是POSIX系统,则manual表示%d表示该月的零填充日,因此date '+%m %d %Y'应该有效,但您提到的格式是实际上是date '+%Y%m%d'

答案 3 :(得分:0)

通过上述答案和您的评论,有助于了解您的平台以及您需要该格式的日期的原因。在平台上,最好查看手册man date或内置帮助date -h中列出的日期选项。

另一方面,如果你需要yyyymmdd类型的日期规格是获得一个可排序的数字或名称,那么你也可以使用纪元时间:1970年1月1日以来的秒数。这对于进行时间计算也相当不错。只需每小时加/减3600或每天(3600 * 24)等等。最后,它甚至是时区和安全的。

如果有帮助,我听说yyyymmdd(或yyyymmddHHMMSS)编写日期/时间规范的方式称为'iso',但我可能会离开这里。