CMD中的ISO周数

时间:2016-09-07 15:58:18

标签: date batch-file cmd date-arithmetic week-number

如何确定Windows批处理文件中的(ISO 8601)周数?

不幸的是WMIC PATH WIN32_LOCALTIME GET /FORMAT:LIST只有 WeekInMonth ...

我找到了一些very complex solutions。有没有更简单的方法?

3 个答案:

答案 0 :(得分:6)

您可以使用Ritchie Lawrences的日期功能。 它保存在Gitub上。 https://ritchielawrence.github.io/batchfunctionlibrary/

这是代码。

 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :DateToWeek %yy% %mm% %dd% yn cw dw
 ::
 :: By:   Ritchie Lawrence, Updated 2002-11-20. Version 1.1
 ::
 :: Func: Returns an ISO 8601 Week date from a calendar date.
 ::       For NT4/2000/XP/2003.
 :: 
 :: Args: %1 year component to be converted, 2 or 4 digits (by val)
 ::       %2 month component to be converted, leading zero ok (by val)
 ::       %3 day of month to be converted, leading zero ok (by val)
 ::       %4 var to receive year, 4 digits (by ref)
 ::       %5 var to receive calendar week, 2 digits, 01 to 53 (by ref)
 ::       %6 var to receive day of week, 1 digit, 1 to 7 (by ref)
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 setlocal ENABLEEXTENSIONS
 set yy=%1&set mm=%2&set dd=%3
 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%%%100
 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
 set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
 set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
 set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
 set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
 set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
 if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
 set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
 if %cw% LSS 10 set cw=0%cw%
 endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%&goto :EOF

答案 1 :(得分:3)

CMD没有可用的本机Windows命令,可轻松提供ISO 8601周编号。事实上,以任何方式处理日期和时间都是一种真正的痛苦。

这就是为什么我写了getTimestamp.bat - 用于进行日期/时间计算和格式化的通用实用程序。它是纯脚本(混合批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 不需要第三方exe。

<view>可以从命令行获取完整文档,如果您需要分页帮助,可以从getTimestamp /?获取。

以下将使用当地日期和时间打印ISO 8601周编号:

getTimestamp /??

您可以轻松地将结果存储在变量

call getTimeStamp /f {isowk}

答案 2 :(得分:1)

在批处理文件中尝试:

@For /F %%I In ('PowerShell Get-Date -UFormat %%V') Do @Echo(%%I
@Timeout -1

或在命令提示符窗口中:

For /F %I In ('PowerShell Get-Date -UFormat %V') Do @Echo(%I