【发布时间】:2014-11-03 15:08:31
【问题描述】:
我正在尝试编写一个原始文件,该文件的日期字段未定义为协议缓冲区的类型。
我已阅读以下帖子,但无法找到适合我的合适解决方案: What the best ways to use decimals and datetimes with protocol buffers?.
我正在尝试将 proto 文件转换为 java 。
【问题讨论】:
标签: java protocol-buffers
我正在尝试编写一个原始文件,该文件的日期字段未定义为协议缓冲区的类型。
我已阅读以下帖子,但无法找到适合我的合适解决方案: What the best ways to use decimals and datetimes with protocol buffers?.
我正在尝试将 proto 文件转换为 java 。
【问题讨论】:
标签: java protocol-buffers
我在链接帖子中的回答主要与 protobuf-net 相关;但是,既然你是从 java 来的,我建议:保持简单。
对于日期,我建议只使用时间(可能是毫秒)进入一个纪元(1970 年 1 月 1 日是传统的)。有时,只是同一单位的大小(毫秒等)。对于十进制,可以简单地通过缩放使用定点 - 所以可以将 1.05 视为长 1050 并始终准确断言 3dp(因此是定点)。
这简单实用,涵盖了最常见的场景,而不会使事情变得复杂。
【讨论】:
我不赞成这个想法,但我真的不赞成将日期(不是即时的)存储为时间戳的想法,所以这是我的建议。
将您的日期转换为人类可读的整数(例如,2014-11-3 变为 20141103)并存储此整数值。它包含您需要的数据,易于创建和解析,并且占用的空间最小。此外,它是有序的,并且具有日期到有效值的一对一映射(当然,可能存在无效数字,例如20149999,但这些很容易检测到)。相比之下,每天大约有 86400 个有效时间戳。
注意:有一个 discussion on DBA SE 批评这种日期存储方法,但在这种情况下,存在一种专门的日期类型,这显然不是这里的情况。
【讨论】: