找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25|回复: 0

[其他] UnxUtils 的 date.exe:批处理中方便地计算日期时间和 Unix 时间戳

[复制链接]
发表于 昨天 19:56 | 显示全部楼层 |阅读模式


最近发现的工具,觉得不错,以下内容我基本验证过了,由ai最终生成,如有错误,请指正。





批处理中经常会遇到日期时间计算,例如:

* 获取几秒、几分钟或几小时后的时间
* 计算指定日期时间之前或之后的时间
* 处理跨天、跨月、跨年等情况
* 获取 Unix 时间戳
* 在普通日期时间与 Unix 时间戳之间转换

单纯使用 CMD 自带命令实现这些功能比较麻烦,而 UnxUtils 中的 date.exe 可以很方便地完成此类计算。

以下用法在 Windows 11 下使用 UnxUtils 版 date.exe 实际验证通过。




## 一、使用前说明

由于 UnxUtils 的 date.exe 与 Windows 自带的 date 命令同名,为避免冲突,建议先改名为:

  1. date.exe → gdate.exe
复制代码


然后将 gdate.exe 放在批处理文件所在目录,或者放进已加入 PATH 环境变量的目录。

本文示例均按照批处理文件中的语法书写,因此日期格式中的百分号使用双百分号:

  1. gdate "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


如果直接在 CMD 命令行窗口中执行,则需要把双百分号改成单百分号:

  1. gdate "+%Y-%m-%d %H:%M:%S"
复制代码




## 二、这个版本需要注意的语法

这个 UnxUtils 版本比较老,在进行相对时间计算时,推荐使用下面的规则。

计算未来时间时,数字前面不要写加号:

  1. 3 second
复制代码

  1. 1 hour 3 second
复制代码


计算过去时间时,在表达式末尾加 ago:

  1. 3 second ago
复制代码

  1. 1 hour 3 second ago
复制代码


不建议使用下面这样的写法:

  1. +3 hour
复制代码

  1. -3 hour
复制代码


经过实际测试,加号和减号在这个旧版本中可能被错误解析。

简单记忆就是:

  1. 3 hour      表示3小时后
  2. 3 hour ago  表示3小时前
复制代码




## 三、常用日期时间格式

  1. %%Y  四位年份,例如 2026
  2. %%y  两位年份,例如 26
  3. %%m  月份,例如 06
  4. %%d  日期,例如 21
  5. %%H  小时,24小时制,例如 08
  6. %%M  分钟,例如 00
  7. %%S  秒,例如 00
  8. %%j  一年中的第几天
  9. %%a  星期缩写
  10. %%A  星期全称
  11. %%s  Unix 时间戳
  12. %%T  等价于 %%H:%%M:%%S
  13. %%D  等价于 %%m/%%d/%%y
复制代码


需要注意,这个版本不支持 %%F。

如果需要输出:

  1. 2026-06-21
复制代码


应直接写:

  1. %%Y-%%m-%%d
复制代码


而 %%D 输出的是:

  1. 06/21/26
复制代码




## 四、支持的时间单位

常用时间单位可以使用单数或复数形式:

  1. second / seconds
  2. minute / minutes
  3. hour / hours
  4. day / days
  5. week / weeks
  6. month / months
  7. year / years
复制代码


其中秒和分钟还支持简写:

  1. second / seconds
  2. sec / secs

  3. minute / minutes
  4. min / mins
复制代码


例如下面几种写法都可以表示30分钟后:

  1. gdate -d "30 minute" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码

  1. gdate -d "30 minutes" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码

  1. gdate -d "30 min" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码

  1. gdate -d "30 mins" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码




## 五、按照当前日期时间计算

获取当前日期时间:

  1. gdate "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取当前日期:

  1. gdate "+%%Y-%%m-%%d"
复制代码


获取当前时间:

  1. gdate "+%%H:%%M:%%S"
复制代码


也可以使用 %%T 简写:

  1. gdate "+%%T"
复制代码


获取3秒后的时间:

  1. gdate -d "3 second" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取3秒前的时间:

  1. gdate -d "3 second ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取30分钟后的时间:

  1. gdate -d "30 min" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取30分钟前的时间:

  1. gdate -d "30 min ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取3小时后的时间:

  1. gdate -d "3 hour" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取3小时前的时间:

  1. gdate -d "3 hour ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取1小时3秒后的时间:

  1. gdate -d "1 hour 3 second" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取1小时3秒前的时间:

  1. gdate -d "1 hour 3 second ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取7天后的日期:

  1. gdate -d "7 day" "+%%Y-%%m-%%d"
复制代码


获取7天前的日期:

  1. gdate -d "7 day ago" "+%%Y-%%m-%%d"
复制代码


获取2周后的日期:

  1. gdate -d "2 week" "+%%Y-%%m-%%d"
复制代码


获取2周前的日期:

  1. gdate -d "2 week ago" "+%%Y-%%m-%%d"
复制代码


获取1个月后的日期:

  1. gdate -d "1 month" "+%%Y-%%m-%%d"
复制代码


获取1个月前的日期:

  1. gdate -d "1 month ago" "+%%Y-%%m-%%d"
复制代码


获取1年后的日期:

  1. gdate -d "1 year" "+%%Y-%%m-%%d"
复制代码


获取1年前的日期:

  1. gdate -d "1 year ago" "+%%Y-%%m-%%d"
复制代码




## 六、按照指定日期时间计算

除了按照当前时间计算,还可以指定一个日期时间作为计算基准。

例如,以 2026-06-21 08:00:00 为基准,计算3秒后的时间:

  1. gdate -d "2026-06-21 08:00:00 3 second" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算3秒前的时间:

  1. gdate -d "2026-06-21 08:00:00 3 second ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算3小时后的时间:

  1. gdate -d "2026-06-21 08:00:00 3 hour" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算3小时前的时间:

  1. gdate -d "2026-06-21 08:00:00 3 hour ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算1小时3秒后的时间:

  1. gdate -d "2026-06-21 08:00:00 1 hour 3 second" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算1小时3秒前的时间:

  1. gdate -d "2026-06-21 08:00:00 1 hour 3 second ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


计算指定日期7天后的日期:

  1. gdate -d "2026-06-21 7 day" "+%%Y-%%m-%%d"
复制代码


计算指定日期1个月前的日期:

  1. gdate -d "2026-06-21 1 month ago" "+%%Y-%%m-%%d"
复制代码




## 七、快捷时间表达式

获取明天此时:

  1. gdate -d "tomorrow" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取昨天此时:

  1. gdate -d "yesterday" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一周后:

  1. gdate -d "week" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一周前:

  1. gdate -d "week ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取两周后:

  1. gdate -d "2 week" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一个月后:

  1. gdate -d "month" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一个月前:

  1. gdate -d "month ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一年后:

  1. gdate -d "year" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


获取一年前:

  1. gdate -d "year ago" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码




## 八、获取 Unix 时间戳

获取当前时间的 Unix 时间戳:

  1. gdate "+%%s"
复制代码


获取3秒后的 Unix 时间戳:

  1. gdate -d "3 sec" "+%%s"
复制代码


获取3秒前的 Unix 时间戳:

  1. gdate -d "3 sec ago" "+%%s"
复制代码


获取3小时后的 Unix 时间戳:

  1. gdate -d "3 hour" "+%%s"
复制代码


获取3小时前的 Unix 时间戳:

  1. gdate -d "3 hour ago" "+%%s"
复制代码


将指定日期时间转换为 Unix 时间戳:

  1. gdate -d "2026-06-21 08:00:00" "+%%s"
复制代码


获取指定日期时间3秒后的 Unix 时间戳:

  1. gdate -d "2026-06-21 08:00:00 3 sec" "+%%s"
复制代码


获取指定日期时间3秒前的 Unix 时间戳:

  1. gdate -d "2026-06-21 08:00:00 3 sec ago" "+%%s"
复制代码




## 九、Unix 时间戳转换为普通时间

现代 GNU date 通常可以使用:

  1. gdate -d @1781991234
复制代码


但这个 UnxUtils 旧版本不支持这种写法。

需要改成以 1970-01-01 UTC 为基准增加相应秒数:

  1. gdate -d "1970-01-01 UTC 1781991234 sec" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


也可以稍微简写:

  1. gdate -d "1970-1-1 Z 1781991234 sec" "+%%Y-%%m-%%d %%T"
复制代码


其中:

  1. UTC 和 Z 均表示协调世界时
  2. %%T 等价于 %%H:%%M:%%S
复制代码


计算这个 Unix 时间戳3秒后的普通时间:

  1. gdate -d "1970-1-1 Z 1781991234 sec 3 sec" "+%%Y-%%m-%%d %%T"
复制代码


计算这个 Unix 时间戳3秒前的普通时间:

  1. gdate -d "1970-1-1 Z 1781991234 sec 3 sec ago" "+%%Y-%%m-%%d %%T"
复制代码


计算这个 Unix 时间戳3小时后的普通时间:

  1. gdate -d "1970-1-1 Z 1781991234 sec 3 hour" "+%%Y-%%m-%%d %%T"
复制代码


计算这个 Unix 时间戳3小时前的普通时间:

  1. gdate -d "1970-1-1 Z 1781991234 sec 3 hour ago" "+%%Y-%%m-%%d %%T"
复制代码




## 十、总结

这个 UnxUtils 版 date.exe 虽然版本较老,不支持部分现代 GNU date 的语法,但对于批处理中的常规日期时间计算已经很实用。

使用时主要记住三点:

1. 为避免与系统命令重名,建议将 date.exe 改名为 gdate.exe。

2. 计算未来时间时,不写加号;计算过去时间时,在末尾加 ago。

  1. 3 hour
  2. 3 hour ago
复制代码


3. Unix 时间戳转换不能使用 @时间戳,需要采用下面的形式:

  1. 1970-01-01 UTC 时间戳 sec
复制代码


例如:

  1. gdate -d "1970-01-01 UTC 1781991234 sec" "+%%Y-%%m-%%d %%H:%%M:%%S"
复制代码


以上示例均按照批处理文件语法书写,并在 Windows 11 下使用 UnxUtils 版 date.exe 实际验证。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-22 02:05

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表