2015-04-04 429 views
0

如何将日期变量转换为秒?如何将结果/ bin /日期“%Y-%m-%d%H:%M:%S”转换为秒?

我定义了一个名为CDATE变量是这样的:

CDATE=$(/bin/date +"%Y-%m-%d %H:%M:%S") 

CDATE输出示例:“2012年12月12日12时12分十二秒”

我想将其转换为时间秒并将其保存在另一个变量中。

+1

你这是什么意思_我需要CDATE_?你想覆盖变量吗? – 2015-04-04 12:06:46

+0

例如CDATE变量存储2012:12:12 12:12:12。我想在几秒钟内转换这个结果并存储在另一个变量中。 – 2015-04-04 12:11:52

回答

2
x=($(date +"%Y-%m-%d %H:%M:%S %s")) 
CDATE="${x[0]} ${x[1]}" 
secs="${x[2]}"  # seconds since 1970-01-01 00:00:00 UTC 
echo $CDATE 
echo $secs 

输出:

 
2015-04-04 14:13:08 
1428149588 
+0

它真的帮助我。谢谢 – 2015-04-04 12:18:51

1

如果不收取CPU时间的话,我会打电话date两次,以使其更易于阅读:

# get the timestamp: 
timestamp=$(date +"%s") 

# format it: 
CDATE=$(date -d @"$timestamp" +"%Y-%m-%d %H:%M:%S") 

echo "$CDATE" 
echo "$timestamp" 
1

在Linux上:

CDATE=$(date "+%Y-%m-%d %H:%M:%S") 
SECONDS=$(date -d "$CDATE" +%s) 

在Mac上:

CDATE=$(date "+%Y-%m-%d %H:%M:%S") 
SECONDS=$(date -j -f "%Y-%m-%d %H:%M:%S" "$CDATE" +%s) 

而且,这两个变量的内容(在两种情况下):

$ echo "$CDATE" 
2015-04-04 16:24:41 

$ echo "$SECONDS" 
1428157497 
+0

从实际的角度来看,这可能并不重要,但严格来说,这两个变量包含不同的时间点。 – 2015-04-04 14:42:08

+0

不,因为第二次调用'date'只是将'$ CDATE'中的字符串转换为自1970-01-01以来的秒数,所以不会生成新日期(就像在您的解决方案中一样)。 – weibeld 2015-04-04 15:34:30

+0

呃,是的,我可能已经停止阅读第二行:-) – 2015-04-04 15:46:10

0

最简单的方法:

source <(date +"CDATE='%Y-%m-%d %H:%M:%S' EPOCH='%s'") 

例子:

[email protected]:/tmp$ source <(date +"CDATE='%Y-%m-%d %H:%M:%S' EPOCH='%s'") 
[email protected]:/tmp$ echo "cdate:$CDATE epoch:$EPOCH" 
cdate:2015-04-05 12:39:58 epoch:1428233998 
相关问题