我正在尝试将以下“时间戳”字符串转换为OSX上bash中的日期。我希望能够计算日期是否超过90天。
<------- hg-test-onprem-connector ------>>>
[
{
"digest": "sha256:6607adac160984fe08f4578b0894c0640647e28cfb712564621667ee9812938c",
"tags": [],
"timestamp": "2019-02-28T14:49:28.4658512Z"
到目前为止,我已经找到了如何将日期转换为bash(osx),但不确定如何将特定日期转换为该格式。
CURR_DATE=$(date +”%d%m%Y”)
echo ‘Current date: ‘$CURR_DATE
# Find the date 90 days ago – For OSX bash:
DELETION_DATE=$(date -v-90d +”%d%m%Y”)
echo ‘Previous date: ‘$DELETION_DATE
任何建议都会有很大帮助。
答案 0 :(得分:1)
我认为第一个问题是OSX date命令不支持十进制小数,因此需要先对其进行修复,然后才能将其转换为日期。
这是我的解决方法:
FIXED_TIMESTAMP=$(echo "2019-02-28T14:49:28.4658512Z" | sed s/\\.[0-9]*//g)
TIMESTAMP_AS_DATE=$(date -jf "%Y-%m-%dT%H:%M:%SZ" $FIXED_TIMESTAMP +%d%m%Y)
echo ‘Timestamp date: ‘$TIMESTAMP_AS_DATE
以上代码的第一行使用sed去除第二个组件的小数部分。在第二行中,我们使用兼容ISO8601的格式字符串将其转换为当前用于其他变量的格式,以读取固定的时间戳。
那应该返回一个与您拥有的其他数值一致的数值。
答案 1 :(得分:1)
我希望能够计算 [“ timestamp”] 日期是否早于90天。
可以使用内置的date
实用程序在OSX上实现以下目的:
#!/usr/bin/env bash
timestamp=2019-02-28T14:49:28.4658512Z
epoch_timestamp=$(date -jf "%Y-%m-%dT%H:%M:%SZ" "${timestamp%%.*}Z" "+%s")
epoch_now=$(date "+%s")
days_diff=$(( (epoch_now - epoch_timestamp) / (24*3600) ))
# Testing...
if (( days_diff > 90 )); then
echo "${timestamp} is greater than 90 days old."
else
echo "${timestamp} is less than, or equal to 90 days old."
fi
以下内容有望帮助您更好地理解上面脚本中的某些组成部分。
在第五行,我们将给定的timestamp
值2019-02-28T14:49:28.4658512Z
转换为Epoch时间,并将结果分配给名为epoch_timestamp
的变量。
epoch_timestamp=$(date -jf "%Y-%m-%dT%H:%M:%SZ" "${timestamp%%.*}Z" "+%s")
读取"${timestamp%%.*}Z"
的部分利用Parameter Expansion删除第一个点字符(.
)之后的子字符串,包括第一个点字符本身。这样可以有效地从时间戳中删除.4658512Z
子字符串,即 microseconds 和Z
。我们这样做是因为Mac OSX内置的date
实用程序无法解析 microseconds 。尾随的Z
部分可以恢复先前删除的Z
。
在第六行,我们还将当前日期/时间转换为大纪元时间,并将结果分配给名为epoch_now
的变量:
epoch_now=$(date "+%s")
在第八行,我们计算epoch_now
和epoch_timestamp
值之间的天数差,并将结果分配给名为days_diff
的变量:
days_diff=$(( (epoch_now - epoch_timestamp) / (24*3600) ))
如果您还想通过编程方式从JSON数据中获取timestamp
值,请考虑使用命令行JSON处理器,例如jq或JSON Tool。
例如;使用 JSON工具,您可以读取JSON文件的内容(如您的问题中所述),并将timestamp
的值分配给名为timestamp
的变量:
timestamp=$(json -a timestamp <~/Desktop/path/to/file.json)
答案 2 :(得分:0)
OSX日期是否支持-d
(--date
)?
以下对我有用:
date -d "2019-02-28T14:49:28.4658512Z" +"%d%m%Y"
但是,我的date
不支持-v
。
我不知道如何计算90天,但是我发现%Y%m%d
对于比较日期更为有用,因为数字比较适用于这种格式。