设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 加入我们
搜索
查看: 15610|回复: 20
收起左侧

64位时间戳与日期时间换算转换算法公式带时区星期毫秒 可计时到2.9亿年 纯核心库计算

[复制链接]
发表于 2018-10-8 21:52:31 | 显示全部楼层 |阅读模式
本帖最后由 QAQ 于 2018-10-8 21:59 编辑


1.png
2.png

  1. .版本 2

  2. .程序集 程序集1
  3. .程序集变量 平年表, 整数型, , "0"
  4. .程序集变量 闰年表, 整数型, , "0"

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

  6. 平年表 = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
  7. 闰年表 = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }

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

  10. .子程序 _临时子程序
  11. .局部变量 时间, 日期时间型
  12. .局部变量 旧时间, 日期时间型
  13. .局部变量 时间戳, 长整数型
  14. .局部变量 旧时间戳, 长整数型
  15. .局部变量 年, 长整数型
  16. .局部变量 月, 字节型
  17. .局部变量 日, 字节型
  18. .局部变量 时, 字节型
  19. .局部变量 分, 字节型
  20. .局部变量 秒, 字节型
  21. .局部变量 星期, 字节型
  22. .局部变量 年2, 长整数型
  23. .局部变量 月2, 字节型
  24. .局部变量 日2, 字节型
  25. .局部变量 时2, 字节型
  26. .局部变量 分2, 字节型
  27. .局部变量 秒2, 字节型
  28. .局部变量 星期2, 字节型
  29. .局部变量 毫秒, 短整数型
  30. .局部变量 毫秒2, 短整数型

  31. 时间 = [2000年1月1日]
  32. .循环判断首 ()
  33.     时间 = 修复日期时间型 (增减时间 (时间, 8, 1))

  34.     年 = 取年份 (时间)
  35.     月 = 取月份 (时间)
  36.     日 = 取日 (时间)
  37.     时 = 取小时 (时间)
  38.     分 = 取分钟 (时间)
  39.     秒 = 取秒 (时间)
  40.     星期 = 取星期几 (时间)
  41.     毫秒 = 取随机数 (0, 999)
  42.     时间戳 = 长时间戳_转换 (年, 月, 日, 时, 分, 秒, 毫秒, 8)
  43.     .如果真 (长时间戳_还原 (时间戳, 年2, 月2, 日2, 星期2, 时2, 分2, 秒2, 毫秒2, 8) = 假)
  44.         输出调试文本 (年2, 月2, 日2, 时2, 分2, 秒2)
  45.         暂停 ()
  46.     .如果真结束
  47.     .如果真 (年2 ≠ 年 或 月2 ≠ 月 或 日2 ≠ 日 或 时2 ≠ 时 或 分2 ≠ 分 或 秒2 ≠ 秒 或 星期2 ≠ 星期 或 毫秒2 ≠ 毫秒)
  48.         输出调试文本 (年2, 月2, 日2, 时2, 分2, 秒2, 毫秒2)
  49.         暂停 ()
  50.     .如果真结束
  51.     .如果真 (旧时间戳 ≠ 0)
  52.         .如果真 (到长整数 (时间戳 \ 1000) - 到长整数 (旧时间戳 \ 1000) ≠ 取时间间隔 (时间, 旧时间, 8))
  53.             输出调试文本 (到长整数 (时间戳 \ 1000) - 到长整数 (旧时间戳 \ 1000), 取时间间隔 (时间, 旧时间, 8), 时间, 旧时间)
  54.             暂停 ()
  55.         .如果真结束
  56.         .如果真 (取随机数 (, ) = 0)
  57.             输出调试文本 (“随机输出调试文本”, 到长整数 (时间戳 \ 1000) - 到长整数 (旧时间戳 \ 1000), 取时间间隔 (时间, 旧时间, 8), 时间, 时间戳, 到字节集 (时间戳))
  58.         .如果真结束

  59.     .如果真结束


  60.     旧时间 = 时间
  61.     旧时间戳 = 时间戳



  62. .循环判断尾 (时间 ≤ [9999年12月31日])
  63. 输出调试文本 (“完成”)

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

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

  67. .子程序 取年天数, 长整数型
  68. .参数 年, 长整数型

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

  70. .子程序 天数到年, 长整数型
  71. .参数 天, 长整数型
  72. .局部变量 四百年周期, 长整数型
  73. .局部变量 一百年周期, 长整数型
  74. .局部变量 四年周期, 长整数型
  75. .局部变量 一年周期, 长整数型
  76. .局部变量 余天, 长整数型
  77. .局部变量 计数, 整数型
  78. .局部变量 年, 整数型

  79. 余天 = 天
  80. 四百年周期 = 余天 \ 146097
  81. 余天 = 余天 % 146097
  82. 一百年周期 = 余天 \ 36524
  83. 余天 = 余天 % 36524
  84. 四年周期 = 余天 \ 1461
  85. 余天 = 余天 % 1461
  86. .判断开始 (余天 ≤ 365)
  87.     一年周期 = 0
  88. .判断 (余天 ≤ 730)
  89.     一年周期 = 1
  90. .判断 (余天 ≤ 1095)
  91.     一年周期 = 2
  92. .默认
  93.     一年周期 = 3
  94. .判断结束
  95. 返回 (一年周期 + 四年周期 × 4 + 一百年周期 × 100 + 四百年周期 × 400)

  96. .子程序 取闰年数, 长整数型
  97. .参数 年, 长整数型

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

  99. .子程序 取年月天数, 字节型
  100. .参数 年, 长整数型
  101. .参数 月, 字节型

  102. 返回 (选择 (是否为闰年 (年), 闰年表 [月], 平年表 [月]))


  103. .子程序 日期时间是否有效, 逻辑型
  104. .参数 年, 长整数型
  105. .参数 月, 字节型
  106. .参数 日, 字节型
  107. .参数 时, 字节型, 可空
  108. .参数 分, 字节型, 可空
  109. .参数 秒, 字节型, 可空
  110. .参数 毫秒, 整数型, 可空

  111. .判断开始 (时 > 23 或 分 > 59 或 秒 > 59 或 毫秒 > 999 或 毫秒 < 0)
  112.     返回 (假)
  113. .判断 (年 < 0 或 月 < 1 或 日 < 1 或 月 > 12)
  114.     返回 (假)
  115. .默认
  116.     返回 (日 ≤ 选择 (是否为闰年 (年), 闰年表 [月], 平年表 [月]))
  117. .判断结束


  118. .子程序 到文本星期, 文本型
  119. .参数 星期, 字节型
  120. .局部变量 文本星期, 文本型, , "0"

  121. .如果真 (星期 < 1 或 星期 > 7)
  122.     返回 (“”)
  123. .如果真结束
  124. 文本星期 = { “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六” }
  125. 返回 (文本星期 [星期])


  126. .子程序 取当前年天数, 整数型
  127. .参数 年, 整数型

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


  129. .子程序 年月日算星期, 字节型, , 已知年月日求星期几,星期日为1、星期1为2、以此类推,失败返回0
  130. .参数 年, 长整数型, , 不能为负数 范围:0~9223372036854775807
  131. .参数 月, 字节型
  132. .参数 日, 字节型
  133. .局部变量 年代码, 整数型
  134. .局部变量 月代码, 整数型, , "0"
  135. .局部变量 星期, 字节型

  136. .判断开始 (日期时间是否有效 (年, 月, 日) = 假)
  137.     返回 (0)
  138. .判断 (是否为闰年 (年))
  139.     年代码 = (取元旦星期 (年) + 2) % 7
  140.     月代码 = { 5, 1, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }
  141. .默认
  142.     年代码 = (取元旦星期 (年) + 8) % 7
  143.     月代码 = { 6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }
  144. .判断结束
  145. 星期 = (年代码 + 月代码 [月] + 日) % 7
  146. .如果真 (星期 = 0)
  147.     星期 = 7
  148. .如果真结束
  149. 返回 (星期)

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

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

  153. .子程序 年月日到天, 长整数型
  154. .参数 年, 长整数型
  155. .参数 月, 字节型
  156. .参数 日, 字节型
  157. .局部变量 闰年, 逻辑型

  158. 闰年 = 是否为闰年 (年)
  159. 返回 (月日到天 (月, 日, 闰年) - 到字节 (闰年) + 取年天数 (年))

  160. .子程序 天到年月日
  161. .参数 天, 长整数型
  162. .参数 年, 长整数型, 参考
  163. .参数 月, 字节型, 参考
  164. .参数 日, 字节型, 参考
  165. .局部变量 闰年, 逻辑型
  166. .局部变量 剩天, 整数型

  167. 年 = 天数到年 (天)
  168. .如果真 (年 % 100 = 0)
  169.     年 = 天数到年 (天 - 1)
  170. .如果真结束
  171. 闰年 = 是否为闰年 (年)
  172. 剩天 = 天 - 取年天数 (年)
  173. 天到月日 (剩天 + 到字节 (闰年), 月, 日, 闰年)


  174. .子程序 月日到天, 短整数型
  175. .参数 月, 字节型
  176. .参数 日, 字节型
  177. .参数 闰年, 逻辑型, 可空
  178. .局部变量 表, 短整数型, , "0"

  179. .如果 (闰年)
  180.     表 = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }
  181. .否则
  182.     表 = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }
  183. .如果结束
  184. 返回 (表 [月] + 日)


  185. .子程序 天到月日
  186. .参数 天, 长整数型
  187. .参数 月, 字节型, 参考
  188. .参数 日, 字节型, 参考
  189. .参数 闰年, 逻辑型, 可空
  190. .局部变量 表, 短整数型, , "0"
  191. .局部变量 计数, 整数型

  192. .如果 (闰年)
  193.     表 = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }
  194. .否则
  195.     表 = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }
  196. .如果结束
  197. .变量循环首 (12, 1, -1, 计数)
  198.     .如果真 (天 > 表 [计数])
  199.         月 = 计数
  200.         日 = 天 - 表 [计数]

  201.         跳出循环 ()
  202.     .如果真结束

  203. .变量循环尾 ()


  204. .子程序 长时间戳_转换, 长整数型, 公开, 返回0年1月1日到指定日期经过的毫秒数(UTC时间),失败返回-1
  205. .参数 年, 长整数型, , 范围0~∞ (超过2.9亿年容易出现溢出错误)
  206. .参数 月, 字节型, , 范围1~12
  207. .参数 日, 字节型, , 范围1~当月最大天数
  208. .参数 时, 字节型, 可空, 0~23
  209. .参数 分, 字节型, 可空, 0~59
  210. .参数 秒, 字节型, 可空, 0~59
  211. .参数 毫秒, 短整数型, 可空, 0~999
  212. .参数 时区, 小数型, , 当地国家对应的时区,中国为8 范围 -12~12
  213. .局部变量 返回值, 长整数型

  214. .如果真 (日期时间是否有效 (年, 月, 日, 时, 分, 秒, 毫秒) = 假)
  215.     返回 (-1)
  216. .如果真结束
  217. 返回值 = 时分秒到秒 (时, 分, 秒) × 1000 + 毫秒
  218. 返回值 = 年月日到天 (年, 月, 日) × 86400000 - 时区 × 3600000 + 返回值
  219. .如果真 (返回值 < 0)
  220.     返回 (-1)
  221. .如果真结束
  222. 返回 (返回值)


  223. .子程序 长时间戳_还原, 逻辑型, 公开, 将64位时间戳还原成年月日时分秒毫秒
  224. .参数 时间戳, 长整数型, , 不能为负数,精度毫秒
  225. .参数 年, 长整数型, 参考, 范围0~∞
  226. .参数 月, 字节型, 参考, 范围1~12
  227. .参数 日, 字节型, 参考, 范围1~当月最大天数
  228. .参数 星期, 字节型, 参考 可空, 周日为1、周一为2
  229. .参数 时, 字节型, 参考 可空, 范围0~23
  230. .参数 分, 字节型, 参考 可空, 范围0~59
  231. .参数 秒, 字节型, 参考 可空, 范围0~59
  232. .参数 毫秒, 短整数型, 参考 可空, 范围0~999
  233. .参数 时区, 小数型, , 当地时区 范围-12~12

  234. 时间戳 = 时间戳 + 时区 × 3600000
  235. .如果真 (时间戳 < 0)
  236.     返回 (假)
  237. .如果真结束
  238. 毫秒 = 时间戳 % 1000
  239. 时间戳 = 时间戳 \ 1000
  240. 秒到时分秒 (时间戳 % 86400, 时, 分, 秒)
  241. 时间戳 = 时间戳 \ 86400
  242. 天到年月日 (时间戳, 年, 月, 日)
  243. 星期 = 年月日算星期 (年, 月, 日)
  244. 返回 (真)

  245. .子程序 时分秒到秒, 整数型
  246. .参数 时, 字节型, , 0~23
  247. .参数 分, 字节型, , 0~59
  248. .参数 秒, 字节型, , 0~59

  249. 返回 (时 × 3600 + 分 × 60 + 秒)

  250. .子程序 秒到时分秒
  251. .参数 总秒, 整数型, , 0~86399
  252. .参数 时, 字节型, 参考, 0~23
  253. .参数 分, 字节型, 参考, 0~59
  254. .参数 秒, 字节型, 参考, 0~59

  255. 时 = 总秒 ÷ 3600 % 24
  256. 分 = 总秒 ÷ 60 % 60
  257. 秒 = 总秒 % 60

  258. .子程序 修复日期时间型, 日期时间型, , 如果计算时间时出现错误可用此方法修复
  259. .参数 时间, 日期时间型

  260. 返回 (到时间 (到文本 (时间)))

复制代码

评分

1

查看全部评分

相关帖子

发表于 2018-10-12 22:47:35 | 显示全部楼层

回帖奖励 +30

这个绝了,就是看看这进制咋转的
发表于 2018-11-16 15:21:22 | 显示全部楼层
楼上俩个来的太突然了...
发表于 2018-12-3 17:51:02 | 显示全部楼层

回帖奖励 +30

这简直就是淫才
发表于 2018-10-9 09:01:04 | 显示全部楼层

回帖奖励 +30

沙发我的了
发表于 2018-10-9 12:32:12 | 显示全部楼层

回帖奖励 +30

我也来一次
发表于 2018-10-14 21:18:52 | 显示全部楼层
我也看看咋搞得
发表于 2018-10-30 19:35:09 | 显示全部楼层

回帖奖励 +30

32位的即将淘汰
发表于 2018-11-1 21:40:33 | 显示全部楼层
上次没中,再来
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-19 15:10 , Processed in 0.479027 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表