中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [挑战5]:日期的前后时间计算 [难度:☆☆]
« [1] [2] »
作者:
标题: [挑战5]:日期的前后时间计算 [难度:☆☆] 上一主题 | 下一主题
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 16 楼』:  

我有个思路就是求余...除365 余数Y1再先对4求余(闰年)看有几个闰年给Y1要再减几个1,得到Y2

然后Y2化成月和日即可。。。
(哈哈,还是execute够偷懒)

2007-5-2 17:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 17 楼』:  

噢。仔细看了一下。确实考虑到了闰年。。

原理研究中?



知,不觉多。不知,乃求知
2007-5-2 18:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 18 楼』:  



  Quote:
Originally posted by slore at 2007-5-2 04:52 AM:
我有个思路就是求余...除365 余数Y1再先对4求余(闰年)看有几个闰年给Y1要再减几个1,得到Y2

然后Y2化成月和日即可。。。
(哈哈,还是execute够偷懒)

现在不管你偷懒与否。。。

给出大家所需要的代码出来吧。。

这一点上,无论如何请不要偷懒了。



知,不觉多。不知,乃求知
2007-5-2 18:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 19 楼』:  

晕死,好像叫新建 脚本文件.vbs

貌似删除了。。那重写看看好了=。=

2007-5-2 18:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 20 楼』:  



  Quote:
Originally posted by slore at 2007-5-2 05:28 AM:
晕死,好像叫新建 脚本文件.vbs

貌似删除了。。那重写看看好了=。=

呵呵,辛苦了:)

期盼ing。



知,不觉多。不知,乃求知
2007-5-2 18:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 21 楼』:  



  Quote:
Dim ADYear
Dim ADMonth
Dim ADDay
Dim ADDDay
Dim RnMod

Dim Mon(12)

Dim strDate, strADDay
strDate = "2007-3-4"
strADDay = 800

ADYear = Year(strDate)
RnMod = ADYear Mod 4
If RnMod = 0 Then tempRNYear = 1
ADMonth = Month(strDate)
ADDay = Day(strDate)

strADDay = strADDay + Date2Day(ADYear, ADMonth, ADDay)
tempYear = strADDay \ 365
tempRNday = strADDay Mod 365
If tempYear <> 0 Then
    tempRNYear = tempRNYear + (RnMod + tempYear) \ 4
    tempRNday = tempRNday - tempRNYear
End If

ADYear = ADYear + tempYear
MsgBox Day2Date(ADYear, tempRNday)


Function Date2Day(ByVal y, ByVal m, ByVal d)
    Mon(1) = 31: Mon(2) = 28: Mon(3) = 31: Mon(4) = 30: Mon(5) = 31: Mon(6) = 30
    Mon(7) = 31: Mon(8) = 31: Mon(9) = 30: Mon(10) = 31: Mon(11) = 30: Mon(12) = 31
    Date2Day = 0
   
    If IsDate(y & "/2/29") Then Mon(2) = 29
    Dim i
    For i = 1 To m - 1
        Date2Day = Date2Day + Mon(i)
    Next
    Date2Day = Date2Day + d
End Function

Function Day2Date(ByVal y, ByVal Days)
    Mon(2) = 28
    If IsDate(y & "/2/29") Then Mon(2) = 29
    Dim i
   
    If Days > 31 Then
        For i = 1 To 11
            If Days < Mon(i) Then Exit For
            Days = Days - Mon(i)
        Next
        ADMonth = i
        
    Else
        ADMonth = 1
    End If
    Day2Date = y & "-" & ADMonth & "-" & Days
End Function

因为每400年有97个闰年,所以存在过8年才一个闰年的情况,所以2000年为初始年的话,你不要去计算146000后的日子,那样会差1,2天,因为我是按每4年一个闰年算的。

这里我只写了+上天数的。。。-的自己改。。。我写这个只是用代码呈现下我的思路而已。。。

   此帖被 +3 点积分      点击查看详情   
评分人:【 flyinspace 分数: +3  时间:2007-5-2 21:26


2007-5-2 20:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 22 楼』:  

8000天也是很快的。。。呵呵

在strADDay=800下面加:
execute("msgbox #" & strDate & "#+" & strADDay)验证下。。。

10000还是正确的。。2000000就乱78糟了。。。我不改了。。。思路明白就OK

2007-5-2 20:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 23 楼』:  

刚刚测试了一下。。还算标准。。。

我写的不够用。。到时再换新的上来。。。



知,不觉多。不知,乃求知
2007-5-2 21:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 24 楼』:  

  在整理索引帖子的时候发现了这个帖子,刚好本人昨天发了个求N天前日期的帖子,请参考这里:求N天前日期的批处理



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-6-8 08:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 25 楼』:  



  Quote:
Originally posted by flyinspace at 2007-5-2 05:34 PM:

算法很简单。。

也比我的用得聪明。。。但因为没有考虑闰年的存在。。

计算长一点的天数时就会出问题。。。

若加入闰年的判断。。会好很多。

没仔细看willsort的代码;
但是 瞥到了这一句;

  Quote:
dd+y*365+y/4-y/100+y/400

这一句 就说明了考虑到了闰年;
这种用法不是挺经典的算法么

2007-6-8 10:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
okmhy
新手上路





积分 15
发帖 7
注册 2006-6-23
状态 离线
『第 26 楼』:  顶~!

很多代码看不懂....紧急学习中..

2007-6-12 23:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
poopoo
新手上路





积分 2
发帖 1
注册 2008-4-17
状态 离线
『第 27 楼』:  第 15 楼

好好好

2008-4-17 17:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
microshaoft
新手上路





积分 4
发帖 4
注册 2009-11-24
状态 离线
『第 28 楼』:  

谢谢先

2009-11-28 13:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: