您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

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

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

类似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%

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