Windows批处理 - 给自己写个库(2. 获取格式化的日期和时间)
来源:互联网 发布:apache mpm 配置 编辑:程序博客网 时间:2024/06/10 19:40
在系统日期和时间的处理上,批处理实在是让人头(dan)疼。可能有人会说,date和Time两个单词就能搞定的事,有啥难的。这样说一点错没有,但是程序里往往会因为直接使用date和Time而出错。
date和time两个命令可以用来获取和修改系统的时间,直接用作变量也可以,但是获取到的时间格式会因为系统设置而不同。
在某台电脑上echo %date%
显示的可能是“1111/11/11”(单身狗受到2^8点伤害),但是在另一台电脑上显示的可能就是“11/11/1111”,更何况“1111年11月11日”这样带中文字的还得考虑字符长度。而echo %time%
,国际通用的“小时分秒”看似结构稳定,“1:1:01”和“11:11:11”同样在字符串长度上让人不省心。
所以,以后看见用如下代码获取时间数字的,你完全可以给个差评了。。。
set Year=%date:~0,4%
set Month=%date:~5,2%
set Day=%date:~8,2%
set Hour=%time:~0,2%
set Minute=%time:~3,2%
set Second=%time:~6,2%
正确的获取8位日期和8位时间的做法(精确到ms)是:首先对日期和时间的格式进行设置,然后对不足两位的时间数进行补齐(时间在设置时补齐不一定有效果?这个问题是别人反馈的。)。
这个流程上来说是没问题了,但是,作为一个优(chu)秀(nv)的(zuo)程序猿,我不会要求别人在运行我程序时还得先去修改自己电脑上日期时间的设置,更别说有些人还不会设置。。。
所以这里的日期时间的格式设置,也需要在批处理中进行,好的是之前的经验告诉我,Control Panel上几乎所有的设置,都是通过修改注册表实现的。而注册表,是可以在批处理中使用reg
命令进行操作的。于是乎在命令行中输入reg /?
查到操作方式,在注册表“HKEY_CURRENT_USER\Control Panel\”下搜索“time”后。找到了可行的解决方案。(这个程序会改变你电脑当前的设置,请先不要测试。后面会解决这个问题)
reg add “HKEY_CURRENT_USER\Control Panel\International” /v sLongDate /t REG_SZ /d yyyy/MM/dd /f>nul
reg add “HKEY_CURRENT_USER\Control Panel\International” /v sShortDate /t REG_SZ /d yyyy/MM/dd /f>nul
reg add “HKEY_CURRENT_USER\Control Panel\International” /v sShortTime /t REG_SZ /d HH:mm:ss /f>nul
reg add “HKEY_CURRENT_USER\Control Panel\International” /v sTimeFormat /t REG_SZ /d HH:mm:ss /f>nul
echo %date% %time%
这样输出的时间日期就会是正常的格式了(这里修改了4个值,因为我不知道哪两个值是有效的)。
不过这样胡乱对别人的系统设置进行修改,和 疼逊管家后台安装 有什么区别!!我又对程序进行了一次修正。
代码如下:DateTime.bat
reg copy "HKEY_CURRENT_USER\Control Panel\International" "HKEY_CURRENT_USER\Control Panel\InternationalCopy" /f>nulreg add "HKEY_CURRENT_USER\Control Panel\International" /v sLongDate /t REG_SZ /d yyyy/MM/dd /f>nulreg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy/MM/dd /f>nulreg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortTime /t REG_SZ /d HH:mm:ss /f>nulreg add "HKEY_CURRENT_USER\Control Panel\International" /v sTimeFormat /t REG_SZ /d HH:mm:ss /f>nulset Year=%date:~0,4%set Month=%date:~5,2%set Day=%date:~8,2%set Hour=%time:~0,2%set Minute=%time:~3,2%set Second=%time:~6,2%set Millisecond=%time:~9,2%set DateTime=%Year%%Month%%Day%%Hour%%Minute%%Second%%Millisecond%reg copy "HKEY_CURRENT_USER\Control Panel\InternationalCopy" "HKEY_CURRENT_USER\Control Panel\International" /f>nulreg delete "HKEY_CURRENT_USER\Control Panel\InternationalCopy" /f>nul
程序因为需要通过修改注册表去得到准确的时间,所以我第一步就将需要修改的注册表进行了一次备份;
然后则是修改注册表,并对时间进行设置;
然后个人经常采用日期和时间作为文件版本的后缀,所以我又把数字连起来赋值给了DateTime
变量;
最后又将备份的注册表覆盖回来,然后删除备份,保证使用者的设置不会发生变动;
而reg的命令会有结果显示,使用>nul
将其屏蔽。
测试代码如下: test.bat
@echo offsetlocal enabledelayedexpansionCall "XZLib\DateTime.bat"echo %Year%echo %Month%echo %Day%echo %Hour%echo %Minute%echo %Second%echo %Millisecond%echo %DateTime%pause
测试结果正常。(下面的图片链接是http://img.blog.csdn.net/20161103173038725,才发现CSDN是用16位的时间来命名图片的~~)
- Windows批处理 - 给自己写个库(2. 获取格式化的日期和时间)
- Windows批处理中获取日期和时间
- Windows批处理中获取日期和时间
- Windows批处理中获取日期和时间
- 批处理(bat)命令获得并格式化日期和时间
- Windows批处理 - 给自己写个库(1. 路径处理)
- 批处理: 获得系统日期和时间, 并格式化显示
- Smarty 获取当前日期时间和格式化日期时间
- Smarty 获取当前日期时间和格式化日期时间
- Windows批处理 - 给自己写个库(3. INI文件的读取)
- Windows批处理 - 给自己写个库(4. 简易的Debug工具)
- Linux C 获取格式化的日期时间
- Linux C 获取格式化的日期时间
- 在Windows批处理中获取系统日期、时间戳记
- Windows批处理中获取系统日期、时间戳记
- 批处理获取当前时间日期
- 时间和日期的格式化和解析
- 格式化日期和时间
- Java开发中的23种设计模式详解
- 【hihocoder 1388】【区间DP】A Game【给出一个数列,两人每次从数列的头尾取数,小ho 先取,小hi每次都采取最优策略,问小ho最终能取得的数的总和最大是多少】
- web前台的学习
- 15个Docker基本命令及用法
- Java NIO 系列教程
- Windows批处理 - 给自己写个库(2. 获取格式化的日期和时间)
- 幂等性 个人理解及应用
- Job for postfix.service failed. See 'systemctl status postfix.service' and 'journalctl -xn' for deta
- Java web后台设计
- java.util.concurrent翻译----Executor框架--接口ExecutorService
- 最短路总结与拓展
- Centos7 firewall 的操作方法和应用
- 1065. A+B and C (64bit) (20)
- adb通过无线网络连接PC端