不同的计时方式怎么用数据库存储查询?公历农历伊斯兰历中国节气

2023-09-03 10:28:42 +08:00
 Kaylar

我要在数据库存储一些商品、活动每年出现的时间段。有些传统商品或活动用的是本国的传统历法,甚至是节日和节气。而且每年可能有多个时间段,描述也可能用旬这种模糊的词,例如:

1279 次点击
所在节点    数据库
8 条回复
baobao1270
2023-09-03 11:00:08 +08:00
无法储存,很多历法都是需要经过天文计算的,单靠本地推算是推不出来的
建议运营在设置的时候就设置公历日期,每年由运营手动设置
yingqi7
2023-09-03 12:44:59 +08:00
只有一个办法,手动维护。有规则的尽量规则化,有源的定期获取,其他的靠填报工具填报
janus77
2023-09-03 13:00:50 +08:00
活动还是手动维护比较好,不光你要考虑历法上面的日期,还有各种临时出现的日期,比如 xx 购物节这些,你觉得这个日期和农历在电商范围内有什么本质上的区别吗?都是指定一段日期然后上活动,而且这个日期随时会变的,比如我说这个节日要上,但是由于各种不可抗力又不上了,这不得人工下架。。。。
Kaylar
2023-09-03 13:23:26 +08:00
@baobao1270 @yingqi7 @janus77 谢谢回复!我 append 了问题
NoOneNoBody
2023-09-03 15:40:14 +08:00
统一用公历
一种方式是用 start,end ,然后加个标注字段,表明该记录适用于什么情况,这个情况应该是可枚举的,如 emun 或字典
如 start, end, enum 序号:中国-->农历-->中秋节,或者入库只用序号就好了,反正读取时免不了一次匹配

另一种方式是不要 start,end ,将每天入库,反正最多一年也就 366 条,并记录该天属于哪个节日,例如春节 7 天假期就 7 条记录
这种方式是直接当天比较,但要描述活动时间区间的话,就需要读取 7 条记录,求 start 和 end

和前端商量哪种更好用,我个人倾向后者,因为更清晰,不容易错
julyclyde
2023-09-03 16:34:25 +08:00
tzdata 可以参考一下,记录的是“某段时间内”有什么具体规定
bill110100
2023-09-04 10:37:36 +08:00
数据库不支持,很多历法甚至都没有完整的计算公式,需要根据当年天象年年调整。这块最好做在业务端,由业务端进行数据转换到公历,数据库只记录公历。
农历的话,可以做一套农历和公历转换表,我不知道你的后端语言是哪种,java 的话,java8 新出的 time 模块有完整的时间定义规范,也有人基于规范实现了各国特殊历法,可以参考 Time4J 。
bill110100
2023-09-04 10:52:10 +08:00
对于后续你的需求,我建议拆分记录表,一张表只记录原始数据,如 start_date ( varchar ):三九之后 ,end_date ( varchar ):五九之前,该数据读到代码里再解析成一组对应年份的公历日期(因为不同年份转化成的公历月份日期都是不一样的),查询时根据需求显示原始数据和解析后的多组时间段数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX