![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 12:15 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 【共享】时间、日期计算与转换 批函数库 |
| 可打印版本 2,976 / 20 |
| 第16楼 plp626 | 发表于 2008-04-27 02:55 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
MonthNumber
The MonthNumber function returns the number of a number from a month name. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :MonthNumber %month% mm :: :: By: Ritchie Lawrence, 2003-05-14. Version 1.0 :: :: Func: Returns the number of month from name of month. Case insensitive :: and only the first three letters are matched, result is 01 to :: 12 or NULL if no match. For NT4/2000/XP/2003. :: :: Args: %1 month name to convert to month number, Jan to Dec (by val) :: %2 var to receive number of month (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set i=0 for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do ( set /a i+=1 & echo/%1|findstr /i /b "%%a" >nul && call set mm=%%i%%) (if 1%mm% LSS 110 set mm=0%mm%) & endlocal&set %2=%mm%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Parameters %1 month name to convert to month number, Jan to Dec (by val) %2 var to receive number of month (by ref) Return Values Only the first three letters of the month are required. For example, if called with Apr or April, 4 is returned. This function is case insensitive. If the month name is invalid, NULL is required. Example @echo off & setlocal ENABLEEXTENSIONS call :MonthNumber April mm echo/April is month: %mm% goto :EOF Remarks None. |
|
| 第17楼 plp626 | 发表于 2008-04-27 02:55 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
OrdinalToDate
The OrdinalToDate function returns a calendar date from an ISO 8601 Ordinal date. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :OrdinalToDate %year% %doy% yy mm dd :: :: By: Ritchie Lawrence, 2002-09-29. Version 1.0 :: :: Func: Returns a calendar date from an ISO 8601 Ordinal date. :: For NT4/2000/XP/2003. :: :: Args: %1 year component to be converted, 4 digits (by val) :: %2 day of year component to be converted, 001 to 366 (by val) :: %3 var to receive year, 4 digits (by ref) :: %4 var to receive month, 2 digits, 01 to 31 (by ref) :: %5 var to receive day of month, 01 to 31 (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS for /f "tokens=1-2" %%a in ('echo/%1 %2') do set /a yy=%%a,o=1%%b%%1000 set /a z=14-1,z/=12,y=yy+4800-z,m=1+12*z-3,j=153*m+2 set /a j=j/5+1+y*365+y/4-y/100+y/400-2432046,j+=o-1 set /a a=j+2432045,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) endlocal&set %3=%yy%&set %4=%mm%&set %5=%dd%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Parameters %1 year component to be converted, 4 digits (by val) %2 day of year component to be converted, 001 to 366 (by val) %3 var to receive year, 4 digits (by ref) %4 var to receive month, 2 digits, 01 to 31 (by ref) %5 var to receive day of month, 01 to 31 (by ref) Return Values See parameters above. Example @echo off & setlocal ENABLEEXTENSIONS call :OrdinalToDate 2000 090 y m d echo/The date of the 90th day of the year 2000 is: %y%-%m%-%d% goto :EOF Remarks Note the second parameter (day of year) must be in the range 001 to 366 (not 1 to 366). |
|
| 第18楼 plp626 | 发表于 2008-04-27 02:55 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
SecsToDate
The SecsToDate function converts the number of seconds elapsed since 1970-01-01 00:00:00 to a calendar date and time. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :SecsToDate %secs% yy mm dd hh nn ss :: :: By: Ritchie Lawrence, updated 2002-07-24. Version 1.1 :: :: Func: Returns a calendar date and time of day from the number of :: elapsed seconds since 1st January 1970 00:00:00. For :: NT4/2000/XP/2003. :: :: Args: %1 seconds used to create calendar date and time of day (by val) :: %2 var to receive year, 4 digits for all typical dates (by ref) :: %3 var to receive month, 2 digits, 01 to 12 (by ref) :: %4 var to receive day of month, 2 digits, 01 to 31 (by ref) :: %5 var to receive hours, 2 digits, 00 to 23 (by ref) :: %6 var to receive minutes, 2 digits, 00 to 59 (by ref) :: %7 var to receive seconds, 2 digits, 00 to 59 (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS set /a i=%1,ss=i%%60,i/=60,nn=i%%60,i/=60,hh=i%%24,dd=i/24,i/=24 set /a a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) (if %hh% LSS 10 set hh=0%hh%)&(if %nn% LSS 10 set nn=0%nn%) if %ss% LSS 10 set ss=0%ss% endlocal&set %7=%ss%&set %6=%nn%&set %5=%hh%&^ set %4=%dd%&set %3=%mm%&set %2=%yy%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Parameters %1 seconds used to create calendar date and time of day (by val) %2 var to receive year, 4 digits for all typical dates (by ref) %3 var to receive month, 2 digits, 01 to 12 (by ref) %4 var to receive day of month, 2 digits, 01 to 31 (by ref) %5 var to receive hours, 2 digits, 00 to 23 (by ref) %6 var to receive minutes, 2 digits, 00 to 59 (by ref) %7 var to receive seconds, 2 digits, 00 to 59 (by ref) Return Values See parameters above. Example This example uses REG.EXE v2.0 to extract the InstallDate value (which is stored as seconds elapsed since 1970-01-01 00:00:00) from the Windows Registry. This is then converted to a date and time. Note the second FOR loop avoids having to use a TAB character in the DELIMS statement of the first FOR loop. echo off & setlocal ENABLEEXTENSIONS :: requires REG.EXE Version 2.0 or later set key="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" set val="InstallDate" for /f "delims=" %%a in ('reg query %key% /v %val%^|find %val%') do ( for %%b in (%%a) do set secs=%%b ) call :SecsToDate %secs% yy mm dd hh nn ss echo/Windows installation date is: %yy%-%mm%-%dd% %hh%:%nn%:%ss% goto :EOF Remarks Use in conjunction with DateToSecs to perform date arithmetic with a resolution of one second. Range is from 0 to 2147483647 or (2^31)-1 seconds which gives a date range from 1970-01-01 00:00:00 to 2038-01-19 03:14:07. |
|
| 第19楼 plp626 | 发表于 2008-04-27 02:55 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
WeekToDate
The WeekToDate function returns a calendar date from an ISO 8601 Week date. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :WeekToDate %yn% %cw% %dw% yy mm dd :: :: By: Ritchie Lawrence, 2002-10-04. Version 1.0 :: :: Func: Returns a calendar date from an ISO 8601 Week date. :: For NT4/2000/XP/2003. :: :: Args: %1 year to convert, 2 or 4 digits (by val) :: %2 calendar week to convert, 2 digits, 01 to 53 (by val) :: %3 day of week to convert, 1 digit, 1 to 7 (by val) :: %4 var to receive year, 4 digits (by ref) :: %5 var to receive month, 2 digits, 01 to 12 (by ref) :: %6 var to receive day of month, 2 digits, 01 to 31 (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS set yn=%1&set cw=%2&set dw=%3 if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) set /a cw=100%cw%%%100,d=3210654 set /a z=14-1,z/=12,y=yn+4800-z,m=1+12*z-3,Jt=153*m+2 set /a Jt=Jt/5+1+y*365+y/4-y/100+y/400-32045,wt=Jt%%7 call set at=%%d:~%wt%,1%%&set /a Jt=at+Jt-3 set /a Jt=Jt+7*cw+dw-9,a=Jt+32045,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) endlocal&set %4=%yy%&set %5=%mm%&set %6=%dd%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Parameters %1 year to convert, 2 or 4 digits (by val) %2 calendar week to convert, 2 digits, 01 to 53 (by val) %3 day of week to convert, 1 digit, 1 to 7 (by val) %4 var to receive year, 4 digits (by ref) %5 var to receive month, 2 digits, 01 to 12 (by ref) %6 var to receive day of month, 2 digits, 01 to 31 (by ref) Return Values See parameters above. Example @echo off & setlocal ENABLEEXTENSIONS call :WeekToDate 2000 15 2 yy mm dd echo/The date on day 2 of week 15 of the year 2000 is: %yy%-%mm%-%dd% goto :EOF Remarks None. |
|
| 第20楼 feixueOK | 发表于 2008-05-07 10:56 |
| 新手上路 发帖 1 积分 2 | |
|
顶一下!
|
|
| 第21楼 joyn | 发表于 2008-05-07 13:06 |
| 中级用户 发帖 105 积分 280 来自 广西 | |
|
不好用
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |