Board logo

标题: [日期时间] 批处理瞬间计算星期数 [打印本页]

作者: Zombie    时间: 2010-2-23 18:07     标题: 批处理瞬间计算星期数

本帖最后由 Zombie 于 2021-1-4 20:29 编辑
  1. @echo off
  2. color 2a
  3. title 星期分析者 Ver1.0
  4. goto main
  5. :main
  6. cls
  7. echo 请输入日期(格式:XXXXYYZZ):
  8. set 日期=
  9. set 年=
  10. set 月=
  11. set 日=
  12. set /p 日期=
  13. echo %日期% | findstr "[0-9]" || goto error
  14. echo %日期% | findstr /I "[a-z]" && goto error
  15. goto load
  16. :load
  17. cls
  18. set /a 年=%日期:~0,4%
  19. set /a 月=%日期:~4,2%
  20. set /a qwe=%年%*10000
  21. set /a asd=%月%*100
  22. set /a 日=%日期%-%qwe%-%asd%
  23. cls
  24. set /a t=%年%/4
  25. set /a tt=%年%/100
  26. set /a ttt=%年%/400
  27. set /a cc=%年%%%4
  28. set /a ccc=%年%%%400
  29. if %cc% equ 0 (
  30. if %ccc% equ 0 (
  31. set /a ery=29
  32. )
  33. ) else (
  34. set /a ery=28
  35. )
  36. if %cc% equ 1 set /a ery=29
  37. if %cc% equ 2 set /a ery=29
  38. if %cc% equ 3 set /a ery=29
  39. if %月% equ 1 set /a t4=%日%
  40. if %月% equ 2 set /a t4=%日%+31
  41. if %月% equ 3 set /a t4=%日%+31+%ery%
  42. if %月% equ 4 set /a t4=%日%+31+%ery%+31
  43. if %月% equ 5 set /a t4=%日%+31+%ery%+31+30
  44. if %月% equ 6 set /a t4=%日%+31+%ery%+31+30+31
  45. if %月% equ 7 set /a t4=%日%+31+%ery%+31+30+31+30
  46. if %月% equ 8 set /a t4=%日%+31+%ery%+31+30+31+30+31
  47. if %月% equ 9 set /a t4=%日%+31+%ery%+31+30+31+30+31+31
  48. if %月% equ 10 set /a t4=%日%+31+%ery%+31+30+31+30+31+31+30
  49. if %月% equ 11 set /a t4=%日%+31+%ery%+31+30+31+30+31+31+30+31
  50. if %月% equ 12 set /a t4=%日%+31+%ery%+31+30+31+30+31+31+30+31+30
  51. set /a tttt=%t4%
  52. set /a x=%t%+%tt%+%ttt%+%t4%+%年%+1
  53. set /a xx=%x%%%7
  54. if %xx% equ 0 echo %年% 年 %月% 月 %日% 日 是星期日
  55. if %xx% equ 1 echo %年% 年 %月% 月 %日% 日 是星期一
  56. if %xx% equ 2 echo %年% 年 %月% 月 %日% 日 是星期二
  57. if %xx% equ 3 echo %年% 年 %月% 月 %日% 日 是星期三
  58. if %xx% equ 4 echo %年% 年 %月% 月 %日% 日 是星期四
  59. if %xx% equ 5 echo %年% 年 %月% 月 %日% 日 是星期五
  60. if %xx% equ 6 echo %年% 年 %月% 月 %日% 日 是星期六
  61. pause>nul
  62. goto main
  63. :error
  64. cls
  65. echo 请确认输入!
  66. pause>nul
  67. goto main
复制代码

作者: Zombie    时间: 2010-2-23 18:08

请版主移至原创区..
作者: Zombie    时间: 2010-2-23 18:09

公式
(年份/4取商+年份/100取商+年份/400取商+年份+加在是那年的第几天)/7
余几就是星期几
0就是星期天
作者: Seter    时间: 2010-2-23 18:31

用基姆拉尔森计算公式...
作者: Zombie    时间: 2010-2-23 19:11

原帖由 Seter 于 2010-2-23 18:31 发表
用基姆拉尔森计算公式...



原来这是基姆拉尔森计算公式

PS:鸡母拉尔神.....
作者: Batcher    时间: 2010-2-23 19:14

批处理函数库里面有一个DateToDOW函数
http://www.bathome.net/thread-3056-1-1.html

VBS版的看起来比较简短
http://www.bathome.net/viewthread.php?tid=2187#pid12597
作者: Zombie    时间: 2010-2-23 19:32

原来已经有人做了......
作者: 523066680    时间: 2010-2-24 10:21     标题: 回复 7楼 的帖子

现在这年头,谁敢说他写的算法在历史上没人做过……
作者: inittab    时间: 2010-3-1 23:46

利用Ritchie Lawrence日期函数计算
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (一 二 三 四 五 六 日) do set/an+=1&set #!n!=%%a
  3. set/p date=请输入正确日期(格式yyyymmdd):
  4. set yy=!date:~0,4!&set mm=!date:~4,2!&set dd=!date:~6,2!
  5. :::输入合法性判断略
  6. set /a dd=100%dd%%%100,mm=100%mm%%%100
  7. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
  8. set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
  9. call echo !yy!年!mm!月!dd!日是星期%%#%dow%%%&pause
复制代码

[ 本帖最后由 inittab 于 2010-3-1 23:48 编辑 ]
作者: 阿键    时间: 2013-4-8 11:13

2013年4月8日是星期二!明显出错了。
作者: 阿键    时间: 2013-4-8 11:27

我要的是第几周,怎么做?
每天自动运行一次,然后根据今天的日期计算出今天在今年中的第几周。
作者: jack_gao1    时间: 2013-8-27 17:18

回复 1# Zombie


    当输入20130930时,退出,看不清楚显示的信息
作者: Batcher    时间: 2021-1-4 21:53

回复 12# jack_gao1


请参考Q-01观察一下哪行代码在报错:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: xtwwz    时间: 2021-2-25 16:16

学习了,谢谢楼主。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2