2025年3月21日 星期五 甲辰(龙)年 月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

BAT批处理脚本案例--时间戳计算返回距1970-1-1 零点的秒数

时间:04-14来源:作者:点击数:68

类似Java、Js等编程语言都有时间戳函数,可返回距离1970-1-1 00:00:00的秒数或豪秒数,调用起来比较方便。windos bat脚本没有时间戳函数,只能通过日期、时间进行手工计算,实现起来比较复杂,具体如下:

1、涉及知识点
1)时间戳计算公式
  • 先计算当前时间距离1970-1-1的天数,days
  • 然后计算秒数,并考虑时区8个小时差异的影响:days * 24 * 60 * 60 + hh * 60 * 60 + mm * 60 + ss - 8 * 60 * 60
  • 具体实现可以参考linxu的源码实现,或参考该文
    https://www.cdsy.xyz/computer/recommend/230414/cd42752.html
2)bat脚本函数、函数返回值实现方式
3)if 字符串、数字判断
4)字符串操作:去引号,字符串截取

windows bat批处理脚本 字符串截取、拼接、查找等使用说明

2、脚本源码

vtimestramp.bat

  • @echo off & setlocal
  • set vdate=%~1
  • set vtime=%~2
  • if not defined vdate (set vdate=%date%)
  • if not defined vtime (set vtime=%time%)
  • call :calcSeconds %vdate:~0,10% %vtime% secs
  • echo %secs%
  • goto :eof
  • :calcSeconds
  • set vdate=%~1
  • set vtime=%~2
  • set yy=%vdate:~0,4% & set mm=%vdate:~5,2% & set dd=%vdate:~8,2%
  • rem 02=>2
  • set /a dd=100%dd%%%100, mm=100%mm%%%100
  • rem 1970年01月01日 天数计算
  • set /a mm-=2
  • if %mm% LEQ 0 (
  • set /a mm+=12
  • set /a yy-=1
  • )
  • set /a days=%yy%/4 - %yy%/100 + %yy%/400 + 367*%mm%/12 + %dd% + %yy%*365 - 719499
  • rem 9:10:12=>09:10:12
  • if "%vtime:~1,1%" == ":" (set "vtime=0%vtime%")
  • set hh=%vtime:~0,2% & set nn=%vtime:~3,2% & set ss=%vtime:~6,2%
  • rem 09=>9
  • set /a hh=100%hh%%%100, nn=100%nn%%%100, ss=100%ss%%%100
  • rem 1970年01月01日 00:00:00, 秒数计算,8个小时时差
  • set /a secs=days*86400 + hh*3600 + nn*60 + ss - 8 * 60 * 60
  • set "%3=%secs%"
  • goto :EOF
1)脚本调用案例

没有参数默认当前日期、当前时间

  • D:\cmdtest\lianxi>vtimestamp.bat
  • 1581993427

指定日期、时间

  • D:\cmdtest\lianxi>vtimestamp.bat 2020-03-18 10:10:10
  • 1584497410
2)函数返回值说明

bat脚本函数返回值有2种实现方式:

1)全局变量,最简单,变量赋值、读取即可;

2)类似参数引用,高级语言常见的一种函数结果返回方式:修改函数参数,bat脚本实现参数返回注意事项:

调用时指定参数名:

call :calcSeconds %vdate:~0,10% %vtime% secs


函数中修改该参数值:

set “%3=%secs%”


调用结束,读取参数%secs%

echo %secs%

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门