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

Java 协议缓冲区:如何定义日期类型?,java,protocol-buffers,Java,Protocol Buffers,我正在尝试将一个包含日期字段的proto文件写入协议缓冲区,该字段未定义为类型 我读过下面的帖子,但找不到适合我的解决方案: 我正在尝试将proto文件转换为java。我在链接帖子中的回答主要与protobuf-net有关;然而,既然您是从java来的,我建议您:保持简单 对于日期,我建议只使用时间(可能是毫秒)来表示一个纪元(传统上是1970年1月1日)。有时,只是相同单位的大小(毫秒等)。对于十进制,可以简单地通过缩放使用固定点-因此可以将1.05视为长1050,并始终精确地断言3dp(因

我正在尝试将一个包含日期字段的proto文件写入协议缓冲区,该字段未定义为类型

我读过下面的帖子,但找不到适合我的解决方案:


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

我在链接帖子中的回答主要与protobuf-net有关;然而,既然您是从java来的,我建议您:保持简单

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


这既简单又实用,涵盖了最常见的场景,而不会使事情变得复杂。

我不赞成这种想法,但我真的不赞成将日期(在时间上不是瞬间)存储为时间戳,所以我的建议如下

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


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

Thx。。。我已经按照你的建议,将日期字段表示为“int64”并将其转换为proto文件,然后将其转换为Date并转换为我的java类。这也是我通常做的,从unix时代开始只存储毫秒。你推荐int64还是fixed64?@ticktock应该是Fine我在不知道protobuf、thrift、,或者阿夫罗。我创建了一个独立的库,与你的建议更相似。