首页 > 解决方案 > 批处理脚本 - 如何获取一年中每个星期一的日期

问题描述

我想使用批处理脚本获取一年中每个星期一的日期列表。

样本输入:

2018

样本输出:

2018-01-01
2018-01-08
2018-01-15
2018-01-22
2018-01-29
...
2018-12-03
2018-12-10
2018-12-17
2018-12-24
2018-12-31

我发现下面的帖子返回每个月上周日的日期: https ://rosettacode.org/wiki/Find_the_last_Sunday_of_each_month#Batch_File

我试图修改它,但它似乎不符合我的要求。

我还在考虑获得一年中的第一个星期一日期,并在该日期上加上 7 并循环直到年底。但是,我正在努力寻找一个这样做的例子。

非常感谢任何帮助。

谢谢,

丹尼尔

标签: batch-filescripting

解决方案


我通常会忽略没有显示 OP 任何努力的“问题”。但是,在这种情况下我做了一个例外,但我没有表现出任何努力来解释代码......

@echo off
setlocal EnableDelayedExpansion

rem Define the "Date to Julian Day Number" and vice versa conversion functions
set "DateToJDN(YMD)=( a=(YMD), y=a/10000, a%%=10000, m=a/100, d=a%%100, a=(m-14)/12, (1461*(y+4800+a))/4+(367*(m-2-12*a))/12-(3*((y+4900+a)/100))/4+d-32075 )"
set "JDNtoDate(JDN)=( a=(JDN), l=a+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,d=l-(2447*j)/80,l=j/11,m=j+2-(12*l),y=100*(n-49)+i+l,y*10000+m*100+d )"

rem Get the date of first and last mondays in the year
set /A "first=!DateToJDN(YMD):YMD=%10101!, first-=first%%7, last=first+371"

rem Show the date of all mondays
for /L %%a in (%first%,7,%last%) do (
   set /A "D=!JDNtoDate(JDN):JDN=%%a!"
   if "!D:~0,4!" equ "%1" echo !D:~0,4!-!D:~4,2!-!D:~6,2!
)

将输入年份放在批处理文件参数中。此答案的更多详细信息


推荐阅读