资讯详情 bttf对比GNU date与dateutils:三大日期时间工具全面横评,该选哪一个?
📅 2026/10/29 9:30:57
【免费下载链接】bttfA command line tool for datetime arithmetic, parsing, formatting and more.项目地址https://gitcode.com/gh_mirrors/bttf/bttf点击查看免费下载在终端里给日期加减一周、转换时区、解析各种格式的日期,bttf是一个用 Rust 编写的日期时间命令行工具,专注于日期时间算术、解析、格式化与批处理。本文将 bttf 与老牌选手GNU date和dateutils放在同一批真实任务中全面横评,帮你快速做出选择。一、先认识三位选手:三大日期时间工具的定位工具定位特点GNU datePOSIX 标准的单兵工具,几乎所有 Linux 自带通用性强,但功能有限、不鼓励管道组合dateutils独立日期工具套件,由多个小程序组成(dateseq、datediff、dateround等)专注日历日期(civil date),组合能力尚可bttf新一代单二进制工具,基于 Jiff 时间库深度支持时区、管道组合、RFC 5545 日期序列GNU date:随 GNU coreutils 分发,是脚本里最安全的默认选择;dateutils:一个程序做一件事,datediff算差值、dateseq生成序列;bttf:命令结构统一为bttf 输出类型 动作,命令实现分散在 src/cmd/time/mod.rs、src/cmd/span/mod.rs、src/cmd/tz/mod.rs 等目录中,官方文档见 GUIDE.md。二、核心功能速览:三大日期时间工具对比表能力GNU datedateutilsbttf日期时间算术(加 1 周等)✅ 藏在解析器里✅✅ 独立命令time add从 stdin 批量处理日期流⚠️ 较笨拙✅✅ 每行一个,天然适配strptime 式自定义格式解析❌⚠️ 有限✅time parse时区转换与时区数据库查询⚠️ 依赖TZ变量✅✅ 内置 IANA 时区库夏令时感知(23 小时/25 小时的天)⚠️❌✅时长(span)四舍五入❌⚠️ 靠格式串,会出现0 years✅ 专用命令span round日期序列生成❌✅dateseq✅time seq,支持 RFC 5545 复现规则给任意数据中的时间戳打标签❌⚠️ 有限✅tag/untagUnicode 本地化输出⚠️ POSIX locale❌✅BTTF_LOCALE三、实战对拼:同一个任务,三种解法1. 给一批日期各加一周:管道组合能力GNU date 需要先用awk把 1 week塞进解析串,再喂给date -f -:$ printf 2025-05-01T00-04\n2025-07-31T00-04\n \ | awk { print $1 1 week} \ | date -f - Thu May 8 12:00:00 AM EDT 2025 Thu Aug 7 12:00:00 AM EDT 2025bttf 则直接对日期流执行算术,一行搞定:$ printf 2025-05-01T00-04\n2025-07-31T00-04\n | bttf time add 1w 2025-05-08T00:00:00-04:00[-04:00] 2025-08-07T00:00:00-04:00[-04:00]更灵活的是,bttf 还内置了time end-of、time sort这类 GNU date 根本做不到的动作,例如直接取每个日期所在月份的月底、或对流排序。2. 解析 DD/MM/YY 日期:谁更听话对05/09/25,GNU date 猜成 5 月 9 日,换了LC_ALL也救不回来:$ date -d 05/09/25 Fri May 9 12:00:00 AM EDT 2025bttf 用 strptime 风格格式串显式声明格式,消除歧义:$ bttf time parse -f %d/%m/%y 05/09/25 | bttf time fmt -f %c Fri, Sep 5, 2025, 12:00:00 AM EDT3. 时区转换 时间取整:一步到位把当前时间转到曼谷时区,并四舍五入到最近的 15 分钟:$ bttf time in Asia/Bangkok now | bttf time round -i 15 -s minute 2025-05-10T19:15:0007:00[Asia/Bangkok]而 bttf 的时长计算感知夏令时:2025-03-09 在纽约只有 23 小时,所以11.75h四舍五入到天会向上取整为1d,而不是0s:$ bttf span round -s day -r 2025-03-09[America/New_York] 11.75h 1ddateutils 目前缺乏处理这类基于参考时间点的取整的命令行手段。4. 日志时间戳批量换时区:bttf 的招牌tag把日志里的 UTC 时间戳原地转换成本地时间并美化,其他两个工具很难优雅做到:$ bttf tag lines /tmp/access.log \ | bttf time in system \ | bttf time fmt -f %c \ | bttf untag -s Wed, Apr 30, 2025, 1:25:14 AM EDT INFO http.log.access.log0 handled request原理:bttf tag lines把每行中的时间戳提取成标签并连同原始数据打包成 JSON Lines,中间所有 bttf 命令只改时间戳,最后bttf untag -s把标签替换回原文。相关实现见 src/cmd/tag/mod.rs 与 src/cmd/untag.rs。四、bttf 的差异化亮点RFC 5545 日期序列:bttf time seq支持每个月第二个周二隔月的最后一个周六这类复杂规则,表达能力远超dateseq:$ bttf time seq monthly -w 2-tue --until $(bttf time end-of year now) | bttf time fmt -f %a, %F Tue, 2025-05-13 Tue, 2025-06-10 Tue, 2025-07-08 ...时区数据库当查询工具用:列出时区历次 DST 切换、反查某个偏移量对应哪些时区:$ bttf tz compatible 2025-05-01T17:3005:30 Asia/Calcutta Asia/Colombo Asia/Kolkata声明式时长取整:指定单位的上下界即可,无需手写格式串。dateutils 用格式串取整时会出现0 years, 1 months, 20 days这类尴尬前缀,bttf 的span round -l year -s day直接给出干净的1mo 20d。Unicode 本地化:通过BTTF_LOCALE环境变量输出各语言格式(如BTTF_LOCALEfr-FR得到ven. 2 mai 2025, 20:29:00 UTC2),还兼容希伯来历法这类 Unicode 扩展。五、GNU date 与 dateutils 的不可替代之处公平起见,两者也有明显优势:GNU date:POSIX 标准、处处可用、零依赖,是跨机器脚本的保底选择;而且 bttf 的bttf time fmt的 strftime 语法与 GNU date 有较高的兼容性,老脚本迁移成本低;dateutils:某些就地改日期场景反而更省事,例如把文件里的日期一律取整到下一个月的 1 号,一条dateround -S -n 1就完成;bttf 能做到,但要多接几个命令(详见官方对比文档 COMPARISON.md)。六、总结:该选哪一个?你的场景推荐写可移植的 POSIX 脚本、环境里啥都没有GNU date以日历日期为主的轻量计算,喜欢一程序一事dateutils管道批处理、时区/DST、复杂日期序列、日志时间戳改造bttf想兼顾兼容性与现代能力保留 GNU date,再引入 bttf 处理高级任务一句话结论:如果只做看一眼当前时间这类小事,GNU date 足够;一旦涉及批量处理、时区、夏令时、序列生成这类日期时间工具进阶需求,bttf 是三者中体验最好、能力最全的选择。七、快速上手:bttf 一分钟安装$ cargo install bttf或克隆仓库自行构建(Cargo.toml 定义了完整依赖;Linux/Windows 发行版也提供静态编译二进制):$ git clone https://gitcode.com/gh_mirrors/bttf/bttf $ cd bttf cargo build --release安装后直接体验(不带参数即打印当前时间):$ bttf Sat, May 10, 2025, 8:02:04 AM EDT $ bttf time add 1 week, 12 hours ago now 2025-05-02T22:34:44-04:00[America/New_York] $ bttf span since 2025-01-20T12:00 | bttf span round -l year -s day 3mo 18d更多示例与概念解释,建议阅读仓库内的 README.md 与 GUIDE.md,并随时使用bttf sub-command --help查看子命令详情。赞分享【免费下载链接】bttfA command line tool for datetime arithmetic, parsing, formatting and more.项目地址https://gitcode.com/gh_mirrors/bttf/bttf点击查看免费下载相关推荐DouZero_For_HLDDZ_FullAuto项目解析基于深度强化学习的斗地主AIDouZero_For_HLDDZ_FullAuto项目解析基于深度强化学习的斗地主AI DouZero_For_HLDDZ_FullAuto是一个将深度强化AI 应用GUI 自动化计算机视觉bttf概览:为什么date总是令人头大?认识ripgrep作者打造的现代时间日期CLI工具bttf概览:为什么date总是令人头大?认识ripgrep作者打造的现代时间日期CLI工具 bttf 是由 ripgrep 作者 Andrew Gallantsam3.1 BF16 vs INT8 vs FP84 个版本大小与精度横评到底该选哪个sam3.1 BF16 vs INT8 vs FP84 个版本大小与精度横评到底该选哪个 SAM 3.1 是 Meta 推出的文本提示图像分割模型tex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考