You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awk转换时间戳字符串为Unix时间戳失败,求助解决方法

用awk转换带微秒的时间戳为Unix时间戳的正确方法

你的命令存在两个核心错误:

  • 仅用$1(日期部分)构造mktime的参数,而mktime要求完整的YYYY MM DD HH MM SS格式,参数不全导致返回错误值;
  • 试图从$1中提取毫秒,但$1是日期字符串,根本没有小数点,这部分逻辑完全无效。

下面是正确的处理命令:

方法一:拆分时间各部分处理

echo "2024-04-16 16:32:38.108580" | awk '{
    split($2, time_parts, /[.:]/)
    time_str = gensub(/-/, " ", "g", $1) " " time_parts[1] " " time_parts[2] " " time_parts[3]
    epoch = mktime(time_str) + time_parts[4]/1000000
    print epoch
}'

方法二:统一转换分隔符后处理

echo "2024-04-16 16:32:38.108580" | awk '{
    full_str = gensub(/[-:]/, " ", "g", $0)
    split(gensub(/\./, " ", "g", full_str), parts)
    epoch = mktime(parts[1]" "parts[2]" "parts[3]" "parts[4]" "parts[5]" "parts[6]) + parts[7]/1000000
    print epoch
}'

说明

  1. mktime函数必须接收年 月 日 时 分 秒格式的字符串,否则会返回错误值;
  2. 原时间字符串的小数部分是微秒,需要除以1000000转换成秒后,加到mktime返回的整数时间戳上,才能得到精确的Unix时间戳。

内容的提问来源于stack exchange,提问作者user180574

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:29:50