将相同日期保存在另一个具有不同格式的变量

时间:2015-04-26 14:52:15

标签: bash shell date

我使用DATE_TIME=$(date +"%Y-%m-%d_%T")来计算实际日期。我想格式化此日期以获取%d.%m.%Y, %T并将其另存为另一个变量。遗憾的是DATE_TIME_2=$(date -d $DATE_TIME +"%d.%m.%Y, %T")不起作用。有什么提示吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

首先,将日期保存为可用作输入的规范格式。 Unix时间戳是一个不错的选择。

DATE_TIME=$(date +%s)

DATE_TIME现在是自1970年1月1日午夜以来经过的秒数。

然后用它来计算你想要的两种形式。

DATE_TIME_1=$(date -d @$DATE_TIME +"%Y-%m-%d_%T")
DATE_TIME_2=$(date -d @$DATE_TIME +"%d.%m.%Y, %T")

注意以规范形式为前缀的@;允许date知道d的参数被解释为整数时间戳。

或者,只计算具有两种格式的单个字符串,用明确的字符分隔:

DT=$(date +"%Y-%m-%d_%T=%d.%m.%Y, %T")

然后,您可以使用read命令轻松拆分。

IFS="=" read DATE_TIME DATE_TIME_2 <<< "$DT"

答案 1 :(得分:0)

您可以使用字符串操作将原始日期分解为组件,然后重新排列它们:

foo=$(date +"%Y-%m-%d_%T")
parts=(${foo//[-_]/ })
echo "${parts[2]}.${parts[1]}.${parts[0]}, ${parts[3]}"

答案 2 :(得分:0)

全部语法,其中有一个很多更简单的解决方案。例如从不对数组大惊小怪。这将做你需要的:

Error: object 'i' not found

学习语法可能有一些价值,但是,......如果你可以通过各种方式避免它,那么就可以了。此时,使用位置参数,并且您需要更精细的格式化,请使用“printf”而不是echo。