在Oracle中实现ISO 8601时间戳差值计算及转epoch时间的方法
ISO 8601格式时间转Unix Epoch秒实现方案
你先转Epoch时间再做减法的思路是完全可行的,不同常用开发环境的转换实现如下:
1. Python 3.7+ 实现
from datetime import datetime # 转换单个ISO时间 def iso_to_epoch(iso_str): return int(datetime.fromisoformat(iso_str.replace("Z", "+00:00")).timestamp()) time1 = "2021-08-24T12:59:05Z" time2 = "2021-08-24T12:59:35Z" # 计算差值 diff = iso_to_epoch(time2) - iso_to_epoch(time1) print(diff) # 输出 30,和实际差值一致
2. JavaScript 实现
function isoToEpoch(isoStr) { // getTime返回毫秒级时间戳,除以1000取整得到秒级Epoch return Math.floor(new Date(isoStr).getTime() / 1000); } const time1 = "2021-08-24T12:59:05Z"; const time2 = "2021-08-24T12:59:35Z"; const diff = isoToEpoch(time2) - isoToEpoch(time1); console.log(diff); // 输出30
3. Linux Shell 实现
使用date命令直接转换:
# 转换单条时间 date -d "2021-08-24T12:59:05Z" +%s # 输出 1629809945 # 直接计算两个时间的差值 time1=$(date -d "2021-08-24T12:59:05Z" +%s) time2=$(date -d "2021-08-24T12:59:35Z" +%s) diff=$((time2 - time1)) echo $diff # 输出30
如果是macOS环境,替换date命令参数为:date -jf "%Y-%m-%dT%H:%M:%SZ" "2021-08-24T12:59:05Z" +%s即可。
注意:ISO 8601时间末尾的Z代表UTC+0时区,上述所有转换都默认按UTC时区处理,不会引入时区偏移误差,计算得到的差值完全准确。
内容的提问来源于stack exchange,提问作者Fredro
相关产品推荐
相关产品推荐

