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

Mac终端中date '+%s%N'命令无法运行的原因及解决办法

这个问题的核心在于Linux和macOS用的是不同版本的date命令——Linux搭载的是GNU版本,而macOS默认是BSD版本,%N(纳秒)是GNU date独有的格式参数,BSD date根本不认识它,所以才会把%N当成普通字符输出,导致后续出现数值解析错误。

给你几个不同场景的解决方案:

1. 安装GNU版本的date(最推荐,和Linux体验完全一致)

如果你经常在macOS上写Linux兼容的脚本,直接装GNU coreutils包是一劳永逸的办法:

  • 用Homebrew安装coreutils(如果没装Homebrew,自行搜索安装方式即可):
    brew install coreutils
    
  • 安装完成后,GNU date会被命名为gdate,把你的命令改成这样就和Linux上一模一样了:
    CURRENT_TIME=$(gdate '+%s%N'); echo "$CURRENT_TIME"
    

2. 用系统自带工具替代(无需额外安装)

如果不想折腾Homebrew,macOS默认自带的Python或Perl都能帮你获取同样的高精度时间:

Python版本(系统默认带Python3)

CURRENT_TIME=$(python3 -c 'import time; print(int(time.time() * 10**9))'); echo "$CURRENT_TIME"

这个命令会输出秒数×10^9的整数,和date '+%s%N'的结果完全一致。

Perl版本(同样是系统自带)

CURRENT_TIME=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time()*1e9'); echo "$CURRENT_TIME"

3. 降级精度用BSD date原生参数(仅毫秒级)

如果你的场景不需要纳秒这么高的精度,BSD date支持%3N输出毫秒(3位数字),命令如下:

CURRENT_TIME=$(date '+%s%3N'); echo "$CURRENT_TIME"

输出格式是秒数+3位毫秒,比如1654778186123,足够大多数脚本场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:49:10