Bash 将同一日期以不同格式保存在另一个变量中

Bash 将同一日期以不同格式保存在另一个变量中,bash,shell,date,Bash,Shell,Date,我使用DATE\u TIME=$(DATE+%Y-%m-%d\u%T)来计算实际日期。我想格式化此日期,以便获取%d.%m.%Y,%T,并将其另存为一个变量。不幸的是DATE\u TIME\u 2=$(DATE-d$DATE\u TIME+%d.%m.%Y,%T)不起作用。有什么建议吗 谢谢。您可以使用字符串操作将原始日期分解为多个组件,然后重新排列: foo=$(date +"%Y-%m-%d_%T") parts=(${foo//[-_]/ }) echo "${parts[2]}.${pa

我使用
DATE\u TIME=$(DATE+%Y-%m-%d\u%T)
来计算实际日期。我想格式化此日期,以便获取
%d.%m.%Y,%T
,并将其另存为一个变量。不幸的是
DATE\u TIME\u 2=$(DATE-d$DATE\u TIME+%d.%m.%Y,%T)
不起作用。有什么建议吗


谢谢。

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

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

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

DATE_TIME=$(date +%s)
DATE\u 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"

IFS=“=”读取日期\u时间日期\u时间\u 2所有语法,其中有一个更简单的解决方案。e、 永远不要对数组大惊小怪。这将满足您的需要:

data.$ set -- $(date "+%Y %m %d %T")
data.$ echo $*
2015 04 26 19:32:55
data.$ DATE_TIME="$1-$2-$3_$4"
data.$ echo $DATE_TIME
2015-04-26_19:32:55
data.$ DATE_TIME_1="$1.$2.$3, $4"
data.$ echo $DATE_TIME_1
2015.04.26, 19:32:55
data.$ 

学习语法可能有一些价值,但是。。。如果你能避免的话,一定要这样做。此时,对于位置参数,并且您需要更丰富的格式,请使用“printf”而不是echo。

但在mac OS X上不能使用,可能仅限于linux?第一部分应在OS X中工作,但需要针对其使用的BSD版本修改对
date
的调用。第二个应该按原样工作。