设为首页收藏本站帮助中心
查看: 12240|回复: 34
收起左侧

易语言年月日算星期终极算法 100年1月1日到9999年12月31日没有1个错误的 纯核心库之作

[复制链接]
回帖奖励 40 枚从币 回复本帖可获得 8 枚从币奖励! 每人限 1 次(中奖概率 80%)
发表于 2018-9-18 23:13:44 | 显示全部楼层 |阅读模式
本帖最后由 CNWTEPRG 于 2018-9-18 23:11 编辑

1.png

  1. .版本 2

  2. .程序集 程序集1

  3. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  4. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  5. 返回 (0)  ' 可以根据您的需要返回任意数值

  6. .子程序 _临时子程序
  7. .局部变量 日期, 日期时间型
  8. .局部变量 系统算的星期, 整数型
  9. .局部变量 本方法算的星期, 整数型

  10. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  11. 输出调试文本 (到文本星期 (年月日算星期 (292277026596, 12, 4)))
  12. 输出调试文本 (到文本星期 (年月日算星期 (2222, 2, 22)))
  13. 输出调试文本 (到文本星期 (年月日算星期 (1, 1, 1)))
  14. 输出调试文本 (到文本星期 (年月日算星期 (1111, 11, 11)))
  15. 输出调试文本 (到文本星期 (年月日算星期 (2022, 2, 22)))




  16. 日期 = [100年1月1日]
  17. .循环判断首 ()
  18.     系统算的星期 = 取星期几 (日期)
  19.     本方法算的星期 = 年月日算星期 (取年份 (日期), 取月份 (日期), 取日 (日期))
  20.     .如果 (系统算的星期 = 本方法算的星期)
  21.         .如果真 (取随机数 (0, 10000) = 0)
  22.             输出调试文本 (到文本 (日期) + “ ” + 到文本星期 (本方法算的星期))
  23.         .如果真结束

  24.     .否则
  25.         暂停 ()

  26.     .如果结束
  27.     日期 = 增减时间 (日期, 5, 1)
  28. .循环判断尾 (日期 ≠ [9999年12月31日])


  29. .子程序 年月日算星期, 字节型, 公开, 已知年月日求星期几,星期日为1、星期1为2、以此类推,失败返回0
  30. .参数 年, 长整数型, , 不能为负数 范围:0~9223372036854775807
  31. .参数 月, 字节型
  32. .参数 日, 字节型
  33. .局部变量 年代码, 整数型
  34. .局部变量 月代码, 整数型, , "0"
  35. .局部变量 星期, 字节型

  36. .判断开始 (日期时间是否有效 (年, 月, 日) = 假)
  37.     返回 (0)
  38. .判断 (是否为闰年 (年))
  39.     年代码 = (取元旦星期 (年) + 2) % 7
  40.     月代码 = { 5, 1, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }
  41. .默认
  42.     年代码 = (取元旦星期 (年) + 8) % 7
  43.     月代码 = { 6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }
  44. .判断结束
  45. 星期 = (年代码 + 月代码 [月] + 日) % 7
  46. .如果真 (星期 = 0)
  47.     星期 = 7
  48. .如果真结束
  49. 返回 (星期)

  50. .子程序 是否为闰年, 逻辑型
  51. .参数 年, 长整数型

  52. 返回 (年 % 4 = 0 且 年 % 100 ≠ 0 或 年 % 400 = 0)

  53. .子程序 取年天数, 长整数型
  54. .参数 年, 长整数型

  55. 返回 (年 × 365 + 取闰年数 (年))

  56. .子程序 取元旦星期, 整数型
  57. .参数 年, 长整数型

  58. 返回 ((1 + 取年天数 (年) - 取当前年天数 (年)) % 7)

  59. .子程序 取当前年天数, 整数型
  60. .参数 年, 长整数型

  61. 返回 (选择 (是否为闰年 (年), 366, 365))

  62. .子程序 取闰年数, 长整数型
  63. .参数 年, 长整数型

  64. 返回 (年 \ 4 - 年 \ 100 + 年 \ 400)

  65. .子程序 日期时间是否有效, 逻辑型
  66. .参数 年, 长整数型
  67. .参数 月, 字节型
  68. .参数 日, 字节型
  69. .参数 时, 字节型, 可空
  70. .参数 分, 字节型, 可空
  71. .参数 秒, 字节型, 可空
  72. .局部变量 平年表, 整数型, 静态, "0"
  73. .局部变量 闰年表, 整数型, 静态, "0"

  74. 平年表 = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
  75. 闰年表 = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
  76. .判断开始 (时 > 23 或 分 > 59 或 秒 > 59)
  77.     返回 (假)
  78. .判断 (年 < 0 或 月 < 1 或 日 < 1 或 月 > 12)
  79.     返回 (假)
  80. .默认
  81.     返回 (日 ≤ 选择 (是否为闰年 (年), 闰年表 [月], 平年表 [月]))
  82. .判断结束


  83. .子程序 到文本星期, 文本型
  84. .参数 星期, 字节型
  85. .局部变量 文本星期, 文本型, , "0"

  86. .如果真 (星期 < 1 或 星期 > 7)
  87.     返回 (“”)
  88. .如果真结束
  89. 文本星期 = { “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六” }
  90. 返回 (文本星期 [星期])
复制代码

评分

1

查看全部评分

回复

使用道具 举报

发表于 2018-10-13 00:06:17 | 显示全部楼层

回帖奖励 +8 枚从币

HNY 发表于 2018-10-1 19:49
到时候年月日进位制度保不准啥时候修改了这个也没用了。

至少几千几万年吧,据说闰秒啥的就出来了...
回复 支持 反对

使用道具 举报

发表于 2018-10-1 19:49:10 | 显示全部楼层

回帖奖励 +8 枚从币

到时候年月日进位制度保不准啥时候修改了这个也没用了。
回复 支持 反对

使用道具 举报

发表于 2019-1-27 17:15:26 | 显示全部楼层

回帖奖励 +8 枚从币

到现在都没找到一个计算准确的算法,这个绝对得顶!!!!!!
回复 支持 反对

使用道具 举报

发表于 2018-9-19 09:00:07 | 显示全部楼层

回帖奖励 +8 枚从币

这个必须得顶
回复 支持 反对

使用道具 举报

发表于 2018-9-19 23:26:04 | 显示全部楼层

回帖奖励 +8 枚从币

本帖最后由 1心1亿 于 2018-9-19 23:28 编辑

这个绝对6,比别的都好用。
回复 支持 反对

使用道具 举报

发表于 2018-9-20 10:01:26 | 显示全部楼层
来瞅瞅咋整的
回复 支持 反对

使用道具 举报

发表于 2018-9-21 10:34:19 | 显示全部楼层

回帖奖励 +8 枚从币

66666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则