如果要获取 unix 时间戳,则需要使用:
timestamp=$(date +%s)
%T
会给你时间;与 %H:%M:%S
相同(通过 http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)
为了获取当前时间戳而不是定义固定变量的时间,诀窍是使用函数而不是变量:
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T" # current time
}
# 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
echo "$(timestamp): something happened"
。
date +"%Y-%m-%d_%H-%M-%S"
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
echo $(date +"%Y-%m-%dT%T.%3N%z")
但是我无法让它在 Mac 终端中工作。如何在 Mac 中做同样的事情。谢谢
ISO 8601 格式 (2018-12-23T12:34:56
) 比 UNIX 时间戳更具可读性。但是,在某些操作系统上,文件名中不能包含 :
。因此,我建议改用这样的东西:
2018-12-23_12-34-56
您可以使用以下命令获取此格式的时间戳:
TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`
这是我看到许多应用程序使用的格式。另一个好处是,如果您的文件名以此开头,您可以按字母顺序对它们进行排序,并且它们将按日期排序。
TZ=UTC date +...
可以通过使用 UTC 时间戳使其更便携
Z
;并修改 @Caner 以使用 T
: TIMESTAMP="$(TZ=UTC date +%Y-%m-%dT%H_%M_%SZ)"
您可以参考下表根据需要生成时间戳:
Format/result | Command | Output
--------------------------------+----------------------------+------------------------------
YYYY-MM-DD | date -I | $(date -I)
YYYY-MM-DD_hh:mm:ss | date +%F_%T | $(date +%F_%T)
YYYYMMDD_hhmmss | date +%Y%m%d_%H%M%S | $(date +%Y%m%d_%H%M%S)
YYYYMMDD_hhmmss (UTC version) | date --utc +%Y%m%d_%H%M%SZ | $(date --utc +%Y%m%d_%H%M%SZ)
YYYYMMDD_hhmmss (with local TZ) | date +%Y%m%d_%H%M%S%Z | $(date +%Y%m%d_%H%M%S%Z)
YYYYMMSShhmmss | date +%Y%m%d%H%M%S | $(date +%Y%m%d%H%M%S)
YYYYMMSShhmmssnnnnnnnnn | date +%Y%m%d%H%M%S%N | $(date +%Y%m%d%H%M%S%N)
YYMMDD_hhmmss | date +%y%m%d_%H%M%S | $(date +%y%m%d_%H%M%S)
Seconds since UNIX epoch: | date +%s | $(date +%s)
Nanoseconds only: | date +%N | $(date +%N)
Nanoseconds since UNIX epoch: | date +%s%N | $(date +%s%N)
ISO8601 UTC timestamp | date --utc +%FT%TZ | $(date --utc +%FT%TZ)
ISO8601 UTC timestamp + ms | date --utc +%FT%T.%3NZ | $(date --utc +%FT%T.%3NZ)
ISO8601 Local TZ timestamp | date +%FT%T%Z | $(date +%FT%T%Z)
YYYY-MM-DD (Short day) | date +%F\(%a\) | $(date +%F\(%a\))
YYYY-MM-DD (Long day) | date +%F\(%A\) | $(date +%F\(%A\))
对于我的欧洲同胞,尝试使用这个:
timestamp=$(date +%d-%m-%Y_%H-%M-%S)
将给出格式的格式:“15-02-2020_19-21-58”
您调用变量并获得这样的字符串表示
$timestamp
date +%Y-%m-%d_%H-%M-%S
- 感谢您的回答。
使用命令替换:
timestamp=$( date +%T )
我正在使用 ubuntu 14.04。
我系统中的正确方式应该是date +%s
。
date +%T
的输出类似于 12:25:25
。
很多答案,但找不到我要找的东西:
date +"%s.%3N"
返回类似:1606297368.210
N
的含义是什么
您可以使用
timestamp=`date --rfc-3339=seconds`
这以 2014-02-01 15:12:35-05:00
格式提供
反引号 (`
) 字符将导致计算它们之间的内容并将结果包含在行中。 date --help
有其他选项。
touch $timestamp
将产生两个文件。
date --rfc-3339=...
(大致?)等同于 date '+%F %T%:z'
,因此删除空格很简单(例如):date '+%F_%T%:z'
bash
的最新版本不需要调用外部程序 date
:
printf -v timestamp '%(%T)T'
%(...)T
使用相应的参数作为 UNIX 时间戳,并根据括号之间的 strftime
样式格式对其进行格式化。 -1
的一个参数对应于当前时间,当没有歧义时可以省略。
timestamp=$(awk 'BEGIN {srand(); print srand()}')
没有值的 srand 使用大多数 Awk 实现的当前时间戳。
awk '....'
(如上所示); (2) date '+%s'
; (3) printf '%(%s)T'
;按性能提高的顺序列出:在我的系统上,date
比 awk
快大约 2 倍; printf
比 date
快 50 倍以上比 awk
快 100 倍。
这比您要求的要多一些,因此您可以根据需要对其进行自定义。
我正在尝试在 shell 脚本中创建时间戳变量...
该脚本将允许您创建一个变量。虽然我不完全确定更改 shell 上下文时的可重用性。但它会完成这项工作。
function timestamp {
TEXT="Date:"
DATE=`date +%Y-%m-%d`
TIME=`date +%H:%M:%S`
ZONE=`date +"%Z %z"`
echo $TEXT $DATE $TIME $ZONE
}
function fulldate {
timevariable=$(timestamp)
echo $timevariable
}
echo "- Output 1:"
timestamp
echo "- Output 2:"
fulldate
echo "- Output 3:"
echo $timevariable
输出:
- Output 1:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 2:
Date: 2021-08-12 23:28:08 UTC +0000
- Output 3:
Date: 2021-08-12 23:28:08 UTC +0000
我已经在 GNU bash 版本 4.4.23(1)-release (x86_64-pc-msys) 上对此进行了测试
如果性能是一个问题,@chepner 的 answer 无疑是赢家。
稍微复杂一点,您还可以仅使用 bash 内置函数获得微秒或毫秒的粒度。下面是一个发出当前时间戳(包括毫秒)的函数示例:
timestamp() {
IFS=. read S US <<<$EPOCHREALTIME # Read epoch seconds/microseconds
MS=$((10#$US/1000)) # Convert to milliseconds (interpret in base-10, even with leading 0)
printf '%(%F %T)T.%03i' $S $MS # Emit formatted timestamp
}
TS=$(timestamp) # Invoke function, assign to variable
请注意,可以调整 printf
格式以发出您喜欢的日期/时间格式。
以下将给出本地日期和时间 - 但是它确实需要互联网访问。根据记录的内容,这可能是有益的 - 监控和记录连接状态?
curl -i --silent https://google.com/ 2>&1 | grep date
date: Fri, 03 Jun 2022 17:39:19 GMT
date
获取unix 时间戳的正确格式字符串。但是,我也赞成“正确”的答案。我不是在寻找那个,但它是对原始问题的更好答案,它对我也非常有用。timestamp=$(shell date +%s)
后我工作得很好