标题: [日期时间] [已解决]判断日期的批处理代码,为什么在每月8号9号执行错误? [打印本页]
作者: sunjushi 时间: 2012-10-8 05:59 标题: [已解决]判断日期的批处理代码,为什么在每月8号9号执行错误?
本帖最后由 sunjushi 于 2012-10-8 11:27 编辑
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
-
- set TodayYear=%date:~0,4%
- set TodayMon=%date:~5,2%
- set TodayDay=%date:~8,2%
-
- set LastdayYear=
- set LastdayMon=
- set LastdayDay=
-
- set LastdayYear=%TodayYear%
- set LastdayMon=%TodayMon%
-
- set /A LastdayDay=TodayDay-1
-
-
- if "%LastdayDay%" == "0" (
- if "!LastdayMon!" == "01" (
- set LastdayMon=12
- set /A LastdayYear-=1
- ) else (
- set /A LastdayMon-=1
-
- if "!LastdayMon!" == "1" set LastdayMon=01
- if "!LastdayMon!" == "2" set LastdayMon=02
- if "!LastdayMon!" == "3" set LastdayMon=03
- if "!LastdayMon!" == "4" set LastdayMon=04
- if "!LastdayMon!" == "5" set LastdayMon=05
- if "!LastdayMon!" == "6" set LastdayMon=06
- if "!LastdayMon!" == "7" set LastdayMon=07
- if "!LastdayMon!" == "8" set LastdayMon=08
- if "!LastdayMon!" == "9" set LastdayMon=09
- )
-
- if "!LastdayMon!" == "01" set LastdayDay=31
- if "!LastdayMon!" == "03" set LastdayDay=31
- if "!LastdayMon!" == "04" set LastdayDay=30
- if "!LastdayMon!" == "05" set LastdayDay=31
- if "!LastdayMon!" == "06" set LastdayDay=30
- if "!LastdayMon!" == "07" set LastdayDay=31
- if "!LastdayMon!" == "08" set LastdayDay=31
- if "!LastdayMon!" == "09" set LastdayDay=30
- if "!LastdayMon!" == "10" set LastdayDay=31
- if "!LastdayMon!" == "11" set LastdayDay=30
- if "!LastdayMon!" == "12" set LastdayDay=31
-
- if "!LastdayMon!" == "02" (
- set IsLeapYear=
-
- set /A IsLeapYear=!LastdayYear!%%400
- if "!IsLeapYear!" == "0" (
- set LastdayDay=29
- goto MAKELASTDATE
- )
-
- set /A IsLeapYear=!LastdayYear!%%100
- if "!IsLeapYear!" == "0" (
- set LastdayDay=28
- goto MAKELASTDATE
- )
-
- set /A IsLeapYear=!LastdayYear%%4
- if "!IsLeapYear!" == "0" (
- set LastdayDay=29
- goto MAKELASTDATE
- ) else (
- set LastdayDay=28
- goto MAKELASTDATE
- )
- )
- )
-
- :MAKELASTDATE
-
- if "%LastdayDay%" == "1" set LastdayDay=01
- if "%LastdayDay%" == "2" set LastdayDay=02
- if "%LastdayDay%" == "3" set LastdayDay=03
- if "%LastdayDay%" == "4" set LastdayDay=04
- if "%LastdayDay%" == "5" set LastdayDay=05
- if "%LastdayDay%" == "6" set LastdayDay=06
- if "%LastdayDay%" == "7" set LastdayDay=07
- if "%LastdayDay%" == "8" set LastdayDay=08
- if "%LastdayDay%" == "9" set LastdayDay=09
-
- set LastDate=%LastdayYear%%LastdayMon%%LastdayDay%
- set TodayDate=%TodayYear%%TodayMon%%TodayDay%
-
- echo %LastDate%
- echo %TodayDate%
- pause
复制代码
LastDate在8号和9号无法正确显示,求助原因!
作者: wc726842270 时间: 2012-10-8 07:30
说实话,你的代码我没看,不过这应是进制的问题,0+数字被P处理默认为8进制,而在8进制中08。09是无效数字。所以就悲句了
当然这只是我自已的想法而以
作者: terse 时间: 2012-10-8 10:39
调整一下前面变量的赋值- set /a TodayYear=%date:~0,4%,TodayMon=1%date:~5,2%%%100,TodayDay=1%date:~8,2%%%100
复制代码
作者: sunjushi 时间: 2012-10-8 10:40
回复 2# wc726842270
我后来在第85行加了两行代码。- if "%TodayDay%" == "08" set LastdayDay=07
- if "%TodayDay%" == "09" set LastdayDay=08
复制代码
然后就不存在错误的现象了。好像就是你说的那个原因,那有没有什么简单判断日期的方法么?主要判断当天和前一天日期。
作者: sunjushi 时间: 2012-10-8 10:52
本帖最后由 sunjushi 于 2012-10-8 10:53 编辑
回复 3# terse
按照你的改过之后,昨天日期正确显示了,还需要在下面加上- if "%TodayDay%" == "1" set TodayDay=01
- if "%TodayDay%" == "2" set TodayDay=02
- if "%TodayDay%" == "3" set TodayDay=03
- if "%TodayDay%" == "4" set TodayDay=04
- if "%TodayDay%" == "5" set TodayDay=05
- if "%TodayDay%" == "6" set TodayDay=06
- if "%TodayDay%" == "7" set TodayDay=07
- if "%TodayDay%" == "8" set TodayDay=08
- if "%TodayDay%" == "9" set TodayDay=09
复制代码
才可以正确显示当天日期
作者: terse 时间: 2012-10-8 13:35
回复 4# sunjushi
这个有 搜索本坛
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |