根据天数计算日期
Posted
技术标签:
【中文标题】根据天数计算日期【英文标题】:Working out the date based on the day number 【发布时间】:2012-12-18 23:26:25 【问题描述】:我确信这一定是可能的,但我不知道从哪里开始。
我需要能够根据数字计算出日期。这个数字是连续的,并且每天都会增加一个。所以我可以尽可能多地让数字与一年中的日期相关(即 1 月 1 日将是第 1 天等)但我需要能够用任何 ddmmyyyy 格式计算出日期给定的数字。
我发现了与 C++ 和 Java Script 相关的类似问题...
这可以在 CMD 中完成吗?
编辑
我刚刚意识到日期会根据年份(即闰年)而变化
对于我的脚本,年份将始终是 2012 年,因此我需要能够根据序数(我认为这是描述它的正确方式)日期计算出日期,仅限 2012 年。
【问题讨论】:
那么你也需要年份。如果第 1 天是 1 月 1 日,那么第 400 天会是什么? 我已经编辑了这个问题,因为我忘了提到它永远是 2012... 不会有任何高于 360 的数字,除非文件本身是错误的,在这种情况下他们'必须手动编辑... 好的,在看到您的评论之前,我已经开始着手解决问题了。它现在使用当前年份,但您可以轻松地将其修复,这样会更安全,因为我提出的方法依赖于%DATE%
显示日期的格式,这取决于语言环境。如果年份不是最后 4 个字符,那么我的代码将失败。
【参考方案1】:
下面的代码从当前日期获取日期。当然,很容易将其更改为固定年份。
我想说这都是我自己写的,但它是基于the code by Rob van der Woude。看看网站。它有很多日期计算功能,所有这些功能都隔离在单独的脚本中,而不是我用它制作的固定用途的混乱。 ;)
@echo off
:: Input: The number of days to add. You can make this a parameter
:: too, if you want.
SET /A Days = 20
echo %DATE:~-4%
:: Get 1 january of the current year
SET /A Year1 = %DATE:~-4% + 4800
SET MM=1
SET DD=1
:: Calculate the Julian date of that date.
SET /A Month1 = ( %MM% - 14 ) / 12
SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MM% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DD% - 32075
:: Add the number of days
SET /A JDate = %JDate% + %Days%
:: Calculate it back to year, month and day.
SET /A P = %JDate% + 68569
SET /A Q = 4 * %P% / 146097
SET /A R = %P% - ( 146097 * %Q% +3 ) / 4
SET /A S = 4000 * ( %R% + 1 ) / 1461001
SET /A T = %R% - 1461 * %S% / 4 + 31
SET /A U = 80 * %T% / 2447
SET /A V = %U% / 11
:: SET /A GYear = 100 * ( %Q% - 49 ) + %S% + %V%
SET /A GMonth = %U% + 2 - 12 * %V%
SET /A GDay = %T% - 2447 * %U% / 80
:: Echo only month and day
echo %GMonth% %GDay%
:: Clean-up
FOR %%A IN (P Q R S T U V MM DD JDate Year1 GDay GMonth GYear) DO SET %%A=
【讨论】:
非常感谢。一些小的调整让它按照我的需要工作(主要是用一个简单的'如果小于 10 前缀和 0'来修复个位数的日期和月份,这似乎很完美。以上是关于根据天数计算日期的主要内容,如果未能解决你的问题,请参考以下文章