我知道这个网站上的其他地方有一些答案,但其他人可以帮助我以 yyyymmdd 的格式提供我的约会,当我使用我在不同论坛上找到的任何内容时,我只是得到了 yyyymmd ,我的剧本在本月的前9天失败了......
我目前使用的脚本使用bash并使用
获取日期date '+%m %d %Y'
但是,今天返回 20120110 ,但昨天它返回 2012019 ,我需要此返回 201201 * 0 * 9
有什么想法吗?
由于
P.S。我无法在此服务器上安装任何其他内容,因此gnu或perl已经出局。
答案 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',但我可能会离开这里。