本帖最后由 CrLf 于 2012-4-4 00:41 编辑
Q1:- @echo off
- set/a y1=2012,m1=4,d1=3,h1=1,f1=2,s1=9
- set/a y2=y1,m2=m1,d2=d1,h2=1,f2=3,s2=9
- set/a out=(d2-d1+30*(m2-m1)+m2/9*-~m2/2+!(m2/9)*m2/2+!!(m2/3)*(!(y2%%4)-!(y2%%100)+!(y2%%400)-2)-m1/9*+~m1/2-!(m1/9)*m1/2-!!(m1/3)*(!(y1%%4)-!(y1%%100)+!(y1%%400)-2)+(y2-y1)*365+~-y2/4-~-y2/100+~-y2/400-~-y1/4+~-y1/100-~-y1/400)*86400+(h2-h1)*3600+(f2-f1)*60+s2-s1
- echo %out%
- rem 输出值out=60
- pause
复制代码 思路:- 年份之差*365+天数之差
- 按大小月、平闰年修正天数
- 所得天数乘一日总秒数
- 最后加上秒数差即可
复制代码 其余几个命题同样可依照几个原型公式稍加修改
与 Q1 同类的:
Q2:- @echo off
- set/a y1=2012,m1=4,d1=3,h1=1,f1=2,s1=9
- set/a y2=y1,m2=5,d2=3,h2=1,f2=2,s2=9
- set/a out=d2-d1+30*(m2-m1)+m2/9*-~m2/2+!(m2/9)*m2/2+!!(m2/3)*(!(y2%%4)-!(y2%%100)+!(y2%%400)-2)-m1/9*+~m1/2-!(m1/9)*m1/2-!!(m1/3)*(!(y1%%4)-!(y1%%100)+!(y1%%400)-2)+(y2-y1)*365+~-y2/4-~-y2/100+~-y2/400-~-y1/4+~-y1/100-~-y1/400+((h2-h1)*3600+(f2-f1)*60+s2-s1)/86400
- echo %out%
- rem 输出值out=31
- pause
复制代码 Q3:- @echo off
- set/a y1=2012,m1=4,d1=3,h1=1,f1=2,s1=9
- set/a y2=2012,m2=4,d2=5,h2=1,f2=2,s2=10
- set/a days=d2-d1+30*(m2-m1)+m2/9*-~m2/2+!(m2/9)*m2/2+!!(m2/3)*(!(y2%%4)-!(y2%%100)+!(y2%%400)-2)-m1/9*+~m1/2-!(m1/9)*m1/2-!!(m1/3)*(!(y1%%4)-!(y1%%100)+!(y1%%400)-2)+(y2-y1)*365+~-y2/4-~-y2/100+~-y2/400-~-y1/4+~-y1/100-~-y1/400,secs=(h2-h1)*3600+(f2-f1)*60+s2-s1
- set out=%days% %secs%
- echo %out%
- rem 输出值out=2 1
- pause
复制代码 顺便说一下,楼主似乎没有明确说明天数和秒数的概念,天数的计算是否要精确到秒?秒数的取值范围有多大(需要将相隔天数转为对应秒数吗)? |