batch-file - 在批处理文件中计算两个日期之间的持续时间 (DD/MM/YYYY HH:MM:SS)
问题描述
我想计算具有 DD/MM/YYYY HH:MM:SS 格式的两个日期之间的持续时间:
echo Jours;Mois;Année;hh;mm;JoursF;MoisF;AnnéeF;hhF;mmF;Duration>Duration.csv
REM ====Découper la date en jours, mois et années ==
SET AA1=2018
SET MM1=01
SET JJ1=01
REM REM ====Découper l'heures en heures, Minutes, Secondes ==
SET hh1=01
SET mmm1=20
REM =====saisie deux
REM ====Découper la date en jours, mois et années ==
SET AA2=2019
SET MM2=02
SET JJ2=03
REM ====Découper l'heures en heures, Minutes, Secondes ==
SET hh2=02
SET mmm2=5
REM==== statement condition
IF %AA2% EQU %AA1% IF %MM2% EQU %MM1% IF %JJ2% EQU %JJ1% IF %hh2% EQU %hh1%
IF %mmm2% GTR %mmm1% set /a duration = %mmm2%-%mmm1%
REM===== display duration
Echo %JJ1%;%MM1%;%AA1%;%hh1%;%mmm1%;%JJ2%;%MM2%;%AA2%;%hh2%;%mmm2%;%duration% >>Duration.csv
解决方案
有很多关于如何在批处理文件中实现这些转换的示例。然而,这些方法中的大多数都是初级和粗糙的。
我开发了一种非常有效的方法来获取两次之间经过的秒数,但我从未完成过等效的有效方法来获取两个日期之间经过的天数。所以这里是:
@echo off
setlocal EnableDelayedExpansion
rem Get elapsed days/time between two timestamps in "DD/MM/YYYY HH:MM:SS" format
rem Antonio Perez Ayala aka Aacini
rem Define the "Date in DDMMYYYY format" To "Julian Day Number" conversion "function"
set "DateToJDN(Date)=( a=1Date, y=a%%10000, a/=10000, m=a%%100, d=a/100-100, a=(m-14)/12, (1461*(y+4800+a))/4+(367*(m-2-12*a))/12-(3*((y+4900+a)/100))/4+d-32075 )"
echo Enter two timestamps in "DD/MM/YYYY HH:MM:SS" format
set /P "stamp1=Enter start timestamp: "
set /P "stamp2=Enter end timestamp: "
for /F "tokens=1-4" %%a in ("%stamp1% %stamp2%") do set "date1=%%a" & set "time1=%%b" & set "date2=%%c" & set "time2=%%d"
set /A "days=!DateToJDN(Date):Date=%date2:/=%! - !DateToJDN(Date):Date=%date1:/=%!"
set /A "ss=(((1%time2::=-100)*60+1%-100) - (((1%time1::=-100)*60+1%-100)"
if %ss% lss 0 set /A "ss+=60*60*24, days-=1"
set /A "hh=ss/3600+100, ss%%=3600, mm=ss/60+100, ss=ss%%60+100"
echo/
echo Duration: %days% days and %hh:~1%:%mm:~1%:%ss:~1%
您可以在这些链接中查看有关此程序的更多信息:此答案中描述了时间部分的有效转换方法,此回复中描述了 JulianDayNumber 到日期的转换方法,以及在批处理中定义“函数”的方法描述在这个线程。
推荐阅读
- python - 如何使用“下一步”按钮对烧瓶表单进行分页?
- c# - 如何正确添加 WebRequest 标头?
- apache-spark - pyspark shell 连接到哪个集群?
- python - 将许多 txt/csv 文件编译为单个数据框,并将文件名添加为列
- woocommerce - 如何根据 WooCommerce 用户注册的角色和存在进行重定向?
- php - 防止 Beautiful Soup 关闭我的标签
- wordpress - 检索 AFC 图像字段
- google-apps-script - 通过 Google Script 在 Google 表单中自动填写答案
- ibm-mq - IBM MQ 中的集群 PUB/SUB 是否涉及使用集群通道来传递消息?
- swift - 使用 Alamofire 的同步请求