BASH日期命令:无法重新组合日期和时间

时间:2013-09-14 09:08:08

标签: linux bash date

Linux v2.4 / Bash v3.2 / GNU utils / date命令5.0版

我正在努力使用date命令。在BASH应用程序中,用户可以单独设置日期和时间,从而为日期和时间生成单独的变量。此外,这些变量被重新组合,但这似乎不适合日期命令:我得到一个不同的日期。然而,时间是一样的。测试代码:

#!/bin/bash
dnow1="$(date)"
echo "1 $dnow1"                             # --> Sat Sep 14 16:31:48 EDT 2013
#split date and time
dldate="$(date -d "$dnow1" +"%d-%m-%Y")"
echo "2 $dldate"                            # --> 14-09-2013
dltime="$(date -d "$dnow1" +"%H:%M:%S")"
echo "3 $dltime"                            # --> 16:31:48
#try to re-combine date and time
string="${dldate} ${dltime}"
echo "4 $string"                            # --> 14-09-2013 16:31:48
dnow2="$(date -d "$string")"
echo "5 $dnow2"                             # --> Thu Mar 5 16:31:48 EST 2020

我必须在这里遗漏一些东西。任何人都可以开导我吗?谢谢!

注意: 我正在使用原始XBOX,它具有很少/较少的资源,因此没有其他解决方案如Python的空间。无论如何我都是'bashist'所以它必须是BASH!

编辑:更正的时间格式。谢谢你。 至于“$(....)”我已经养成了尽可能双引号的习惯。

3 个答案:

答案 0 :(得分:1)

获取日期时请改用此格式:

#split date and time
dldate="$(date -d "$dnow1" +"%Y-%m-%d")"

答案 1 :(得分:0)

首先使用-d无法以14-09-2013方式工作,您可以使用一个命令轻松设置日期和时间并将其置于变量中。 例如,只需在shell上尝试以下内容,然后就可以放入shell脚本。

date --date="Feb 2 2014 13:12:10"  
Sun Feb  2 13:12:10 PST 2014

答案 2 :(得分:0)

来自GNU date manual

  

日期命令的输出并不总是可以接受为日期字符串,这不仅是因为语言问题,还因为“IST”等时区项目没有标准含义。使用date生成要在以后解析的日期字符串时,请指定独立于语言的日期格式,并且不使用“UTC”和“Z”以外的时区项目。