协议缓冲区:如何定义日期类型?

时间:2011-10-30 16:59:49

标签: java protocol-buffers

我正在尝试编写一个原型文件,该文件有一个Date字段,该字段未被定义为协议缓冲区中的类型。

我已阅读以下文章,但我找不到适合我的合适解决方案: What the best ways to use decimals and datetimes with protocol buffers?

我正在尝试将proto文件转换为java。

2 个答案:

答案 0 :(得分:4)

我在链接帖子中的回答主要涉及protobuf-net;但是,既然你是从java那里来的,我建议:保持简单。

对于日期,我建议只使用时间(可能是几毫秒)进入一个时代(1970年1月1日是传统的)。有时,只是相同单位的大小(毫秒等)。对于十进制,可以简单地通过缩放来使用固定点 - 所以可以将1.05视为长1050并且始终断言3dp(因此是固定点)。

这是简单实用的,涵盖了大多数常见场景,而不会使事情变得复杂。

答案 1 :(得分:3)

我并没有出售这个想法,但我真的没有出售关于存储日期(时间不是时间)作为时间戳的想法,所以这是我的建议。

将您的日期转换为人类可读的整数(例如2014-11-3变为20141103)并存储此整数值。它包含您需要的数据,创建和解析简单,占用空间极小。此外,它是有序的,并且具有日期与有效值的一对一映射(已授予,无效数字可能,例如20149999,但这些很容易检测)。相比之下,每天约有86400个有效时间戳。

注意:有discussion on DBA SE批评这种日期存储方法,但在这种情况下存在一种专门的日期类型,这显然不是这种情况。