Shell中如何用%N或%3N正确格式化毫秒?
解决date命令输出毫秒时显示“3N”的问题
问题原因
你使用的date版本(大概率是BSD风格,比如macOS自带的)不支持%N纳秒格式符,导致命令中的%3N被错误解析:%3被识别为某个输出值,N则直接作为字符串输出,最终出现23.3N这类结果。
解决方案
根据你的系统类型选择对应方法:
1. GNU date环境(Linux系统或已安装GNU date)
GNU date原生支持%N纳秒格式符,%3N表示取纳秒的前三位作为毫秒值,直接使用以下命令即可:
date +"%Y-%m-%dT%H:%M:%S.%3N"
如果是在macOS上,可先通过Homebrew安装GNU date:
brew install coreutils
之后使用gdate替代date执行命令:
gdate +"%Y-%m-%dT%T.%3N"
2. BSD date环境(如未安装GNU date的macOS)
BSD date不支持%N,但可以通过获取微秒(%6)再截断为三位毫秒的方式实现:
date +"%Y-%m-%dT%T.%6" | cut -c1-23
该命令先输出包含6位微秒的时间,再通过cut命令截取前23个字符(正好保留到毫秒位)。
内容的提问来源于stack exchange,提问作者rosierose12
相关产品推荐
相关产品推荐

