bat批处理开发-wifi联网系列(5):wifi稳定性分析之日期时间比较及奇特数字的坑
公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询、联网、wifi切换感知、自动检测及掉线重连,网络状态分析等功能。
上篇:bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测https://blog.csdn.net/u010870574/article/details/120619232https://blog.csdn.net/u010870574/article/details/120619232讲到根据ssid连接wifi,连接后,检测wifi的可用性等知识。
本次分享第五部分:wifi稳定性分析之日期时间比较及奇特数字的坑,即实现日期时间比较,日期时间比较结果格式化等知识,以及在做日期时间解析和比较时与遇到的08,09两个奇葩数字时无故报错的解决办法。主要知识点如下:
- 两个日期相差多少秒
- 两个时间相差多少秒(分秒偶遇08、09的坑)
- 两个日期时间相差多少秒
- 格式化两个日期时间相差的间隔
1.两个日期相差多少天
即两个 %date%自1970年以来相差的秒数。本函数主要复用Ritchie Lawrence, 2002-09-26. 版本 1.0的函数diffDaysFrom1970,在此基础上进行了进一步封装。代码如下:
rem 从1970年以来的天数 2021 09 22 return 作者:Ritchie Lawrence, 2002-09-26. 版本 1.0
:diffDaysFrom1970setlocal ENABLEEXTENSIONSset yy=%1&set mm=%2&set dd=%3rem if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)set /a dd=100%dd%%%100,mm=100%mm%%%100set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633endlocal&set %4=%j%
goto:eofrem 2个日期相差多少天 d1=2020/09/22 d1=2021/09/22
:diffDayssetlocal&set /a dd1=0,dds=0set yy1=%1&set mm1=%2&set dd1=%3&set yy2=%1&set mm2=%2&set dd2=%3for /f "tokens=1-6 delims=:/ " %%a in ("%~1:%~2") do (call:diffDaysFrom1970 %%a %%b %%c dd1 call:diffDaysFrom1970 %%d %%e %%f dds )set /a dds=%dds%-%dd1% endlocal&set "%3=%dds%"
goto:eof
2.两个时间之间相差的秒数(分秒偶遇08、09的坑)
即两个%time%之间相差的秒数,因此不跨天。但这里不得不说,但遇到time的分钟或秒里面的数字为08或09时,bat在进行算术运算时如60*08+09时会报无效数字,很奇特的问题。而且这个问题隐藏比较深,只有time中的分钟数或秒数刚好为08或09时才报一次错误,因为根本没想到会是08、09这种数字造成的问题,因此费了不少时间调试,终于发现规律,将问题得于解决。为了解决这个问题,不得不打了个补丁:fixNumPatch,专门修正08、09数字参与乘法运算时报错的问题。
好了,补多少,直接上代码:
rem 计算一天内相差多少秒 t1=HH:mm:SS:ss
:diffSecondsOfDaysetlocal enableextensions enabledelayedexpansion&set /a n=0,bb=0,cc=0,ff=0,gg=0for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (call:fixNumPatch %%b bbcall:fixNumPatch %%c cccall:fixNumPatch %%f ffcall:fixNumPatch %%g ggset /a n+=%%e*3600+!ff!*60+!gg!set /a n-=%%a*3600+!bb!*60+!cc!)endlocal&set "%3=%n%"
goto:eofrem 碰到08 09就invalid number,这是什么问题,谁能给解释下
:fixNumPatchsetlocal&set /a n=0if "%1"=="08" (set /a n=8goto endPatch)if "%1"=="09" (set /a n=9goto endPatch)set /a n=%1:endPatchendlocal&set /a %2=%n%
goto:eof
3.两个日期时间相差多少秒
以上两个日期和时间的比较的方法虽然不是我们最终要的结果,但是却是我们计算跨天日期时间相差计算的基础。
比较两个日期时间这种跨天的比较,在网上也有很多解决方案,但是都有一些特定用法,不太通用。因此,本文专门进行了通用算法的封装,求解两个日期时间,支持跨天相差的秒数。
原理很简单,即计算两个日期相差的秒数+计算连个时间相差的秒即可。代码如下:
rem 两个日期相差多少秒 d1=2021/08/20 20:30:30.023
:diffSecondsrem echo [debug] diffSeconds参数=%1 %2 %3 %4 雷区解决setlocal&set /a dsDays=0,dsSecs=0,secs=0call:diffDays %~1 %~3 dsDayscall:diffSecondsOfDay %~2 %~4 dsSecsset /a secs=%dsSecs%+%dsDays%*86400endlocal&set "%5=%secs%"
goto:eof
4.格式化两个日期时间相差的间隔
得到了两个日期时间(可跨天)相差的秒数,在日常的分析计算中非常有用,但是秒的值显示给用户不直观,需要进行格式化处理,解析为相差:xx天xx小时xx分xx秒。代码如下:
rem 秒格式化
:secondFommatsetlocal&set /a n=%1,d=n/86400,n=n%%86400,h=n/3600,n=n%%3600,m=n/60,n=n%%60,ms=n%%1 set sf=rem echo %1 %d%天%h%小时%m%分%n%秒%ms%毫秒if %d% gtr 0 (set sf=%d%天)if %h% gtr 0 (set sf=%sf%%h%小时)if %m% gtr 0 (set sf=%sf%%m%分)if %n% gtr 0 (set sf=%sf%%n%秒)rem if %ms% gtr 0 (set sf=%sf%%ms%毫秒)endlocal&set "%2=%sf%"
goto:eof
好了,以上将日期、时间以及日期时间的比较和格式化功能都封装成了函数,非常方便调用,并已经计算结果进行进一步的分析和展示。
系列文章:
bat批处理开发系列(1):获取已连的wifi及其密码
bat批处理开发-wifi联网系列(2):从wifi列表选择一个wifi
bat批处理开发-wifi联网系列(3):查询当前连接的wifi SSID和密码,封装为bat函数(如何传递入参和返回出参)
bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测
bat批处理开发-wifi联网系列(5):wifi稳定性分析之日期时间比较及奇特数字的坑相关推荐
- bat批处理开发-wifi联网系列(3):查询当前连接的wifi SSID和密码,封装为bat函数(如何传递入参和返回出参)
公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第三部分:查询当前连接的wifi S ...
- bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测
公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第四部分:连接wifi,并对wifi ...
- bat批处理开发-wifi联网系列(1):获取已连的wifi及其密码
公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第一部分:可用wifi查询的功能. ...
- 游戏开发jenkins杂谈系列:windows系统下修改系统时间触发Build periodically设置的定时任务,往前调时间但不再执行定时任务的解决办法
网上搜了一堆帖子,没有讲到我遇到的这个问题的: windows系统下修改系统时间执行定时任务,例如任务在2020.11.18. 20:36分已经触发了,我将时间调回至2020.11.17 20:35, ...
- r roc曲线 语言_R语言系列6:生存分析中多重时间依赖性ROC曲线绘制 timeROC
上一篇文章,我们讲到R语言实现Cox回归生存预测模型构建,以及如何将Logistic回归中,多条ROC曲线绘制在一个图里 今天主要围绕生存分析中,预测模型验证部分,如何将多条time-depend e ...
- 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)
目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...
- 【bat批处理脚本命令】bat脚本命令的基本使用(保姆级图文+实现代码)
目录 1.bat脚本命令的注释 2.bat脚本命令的换行 3.bat脚本命令的if判断 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 ...
- 团队项目开发“编码规范”之九:代码分析
团队项目开发"编码规范"之九: 代码分析 发布日期:2011年3月17日星期三作者:EricHu ...
- .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)
.NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析) 总结日期:2019年10月10日 ...
最新文章
- linux下通过命令来下载视频
- Kinect安装与配置(openNI2)
- TIOBE 3月榜单:新功能将加入,C语言仍高居榜首
- maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
- AliOS Things 电源管理框架使用说明
- 利用ajax,巧妙的sql语句组合,轻松做出不错的树型菜单
- 逾期数据波动有可能是催收策略调整,你清楚吗?
- Python中的非可变型的数据类型(immutable type)
- 洛谷——P1495 曹冲养猪
- Java对象的强引用、软引用、弱引用和虚引用 笔记
- android ui 资源下载,【51CTO推荐】Android UI设计相关下载资源
- Keil5手动添加Device
- XX市核酸检测软件开发基本方案
- Term40:若一个类是函数子(functor),则应使它可配接(adaptable)
- 安装QQ音乐后导致Windows系统程序audiodg.exe频繁报错
- python字符串重复子串_LeetCode 459. 重复的子字符串 | Python
- 16个优秀网站设计网站
- Python工程师面试必备25条Python知识点
- 智能养老手环能够防止老年人出现安全意外
- vue使用xlsx导出excel