公司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稳定性分析之日期时间比较及奇特数字的坑相关推荐

  1. bat批处理开发-wifi联网系列(3):查询当前连接的wifi SSID和密码,封装为bat函数(如何传递入参和返回出参)

    公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第三部分:查询当前连接的wifi S ...

  2. bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测

    公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第四部分:连接wifi,并对wifi ...

  3. bat批处理开发-wifi联网系列(1):获取已连的wifi及其密码

    公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第一部分:可用wifi查询的功能. ...

  4. 游戏开发jenkins杂谈系列:windows系统下修改系统时间触发Build periodically设置的定时任务,往前调时间但不再执行定时任务的解决办法

    网上搜了一堆帖子,没有讲到我遇到的这个问题的: windows系统下修改系统时间执行定时任务,例如任务在2020.11.18. 20:36分已经触发了,我将时间调回至2020.11.17 20:35, ...

  5. r roc曲线 语言_R语言系列6:生存分析中多重时间依赖性ROC曲线绘制 timeROC

    上一篇文章,我们讲到R语言实现Cox回归生存预测模型构建,以及如何将Logistic回归中,多条ROC曲线绘制在一个图里 今天主要围绕生存分析中,预测模型验证部分,如何将多条time-depend e ...

  6. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)

    目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...

  7. 【bat批处理脚本命令】bat脚本命令的基本使用(保姆级图文+实现代码)

    目录 1.bat脚本命令的注释 2.bat脚本命令的换行 3.bat脚本命令的if判断 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 ...

  8. 团队项目开发“编码规范”之九:代码分析

    团队项目开发"编码规范"之九: 代码分析 发布日期:2011年3月17日星期三作者:EricHu                                           ...

  9. .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析)

    .NET平台C/S架构应用程序开发核心技术总结(MyKTV点歌系统案例分析) 总结日期:2019年10月10日                                             ...

最新文章

  1. linux下通过命令来下载视频
  2. Kinect安装与配置(openNI2)
  3. TIOBE 3月榜单:新功能将加入,C语言仍高居榜首
  4. maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
  5. AliOS Things 电源管理框架使用说明
  6. 利用ajax,巧妙的sql语句组合,轻松做出不错的树型菜单
  7. 逾期数据波动有可能是催收策略调整,你清楚吗?
  8. Python中的非可变型的数据类型(immutable type)
  9. 洛谷——P1495 曹冲养猪
  10. Java对象的强引用、软引用、弱引用和虚引用 笔记
  11. android ui 资源下载,【51CTO推荐】Android UI设计相关下载资源
  12. Keil5手动添加Device
  13. XX市核酸检测软件开发基本方案
  14. Term40:若一个类是函数子(functor),则应使它可配接(adaptable)
  15. 安装QQ音乐后导致Windows系统程序audiodg.exe频繁报错
  16. python字符串重复子串_LeetCode 459. 重复的子字符串 | Python
  17. 16个优秀网站设计网站
  18. Python工程师面试必备25条Python知识点
  19. 智能养老手环能够防止老年人出现安全意外
  20. vue使用xlsx导出excel

热门文章

  1. 程序设计方法学-python
  2. 虚拟化技术—— 介绍
  3. 干货分享--企业微信社群促活的12种方式
  4. String“+”与StringBuffer/StringBuilder 对象的append方法
  5. 原生js自定义属性的操作:setAttribute、getAttribute、removeAttribute、hasAttribute
  6. request.setAttribute理解
  7. Python聚类分析
  8. Cygwin使用介绍
  9. awk详解:awk语言及应用
  10. 文章阅读总结:GPT