我正在尝试在shell脚本中创建一个timestamp变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并在发出echo $timestamp
时打印出当前时间。事实证明,这比我想象的要困难得多。以下是我尝试过的一些事情:
timestamp="(date +"%T")"
echo打印出(date +"%T")
timestamp="$(date +"%T")"
echo打印变量初始化的时间。
我尝试的其他事情只是轻微的变化,没有任何改善。有谁知道如何完成我想要做的事情?
答案 0 :(得分:478)
如果您想获得unix时间戳,则需要使用:
timestamp=$(date +%s)
%T
会给你时间;与%H:%M:%S
相同(通过http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)
答案 1 :(得分:248)
为了获得当前时间戳而不是定义固定变量的时间,诀窍是使用函数并且不变量:
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T"
}
# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...
如果您不喜欢%T
说明符给出的格式,则可以组合date
接受的其他时间转换说明符。对于GNU date
,您可以在官方文档中找到这些说明符的完整列表:https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers
答案 2 :(得分:39)
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
答案 3 :(得分:19)
ISO 8601格式(2018-12-23T12:34:56
)比UNIX时间戳更具可读性。但是在某些操作系统上,文件名中不能包含:
。因此,我建议使用类似的东西:
2018-12-23_12-34-56
您可以使用以下命令以此格式获取时间戳:
date +%Y-%m-%d_%H-%M-%S
这是我见过许多应用程序使用的格式。另一件好事是,如果您的文件名以此开头,您可以按字母顺序对它们进行排序,它们将按日期排序。
答案 4 :(得分:15)
使用命令替换:
timestamp=$( date +%T )
答案 5 :(得分:13)
对于我的欧洲同胞,请尝试使用此:
timestamp=$(date +%d-%m-%Y_%H-%M-%S)
将给出以下格式的格式:“ 15-02-2020_19-21-58”
您调用变量并获得像这样的字符串表示形式
$timestamp
答案 6 :(得分:10)
我正在使用ubuntu 14.04。
我系统中的正确方法应该是date +%s
。
date +%T
的输出与12:25:25
类似。
答案 7 :(得分:9)
您可以使用
timestamp=`date --rfc-3339=seconds`
此格式为2014-02-01 15:12:35-05:00
反向标记(`
)字符将导致评估它们之间的内容并将结果包含在该行中。 date --help
还有其他选择。
答案 8 :(得分:2)
bash
的最新版本不需要调用外部程序date
:
printf -v timestamp '%(%T)T'
%(...)T
使用相应的参数作为UNIX时间戳,并根据括号之间的strftime
样式格式设置其格式。 -1
的参数对应于当前时间,可以避免出现歧义的情况可以省略。
答案 9 :(得分:1)
timestamp=$(awk 'BEGIN {srand(); print srand()}')
没有值的srand使用大多数Awk实现的当前时间戳。
答案 10 :(得分:1)
很多答案,但找不到我想要的东西:
date +"%s.%3N"
返回类似:1606297368.210