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