在Thrift IDL中没有Date类型。表示日期对象的最佳跨语言机制是什么?我认为有两个理想的候选人,但我想听听其他的想法。
- 字符串-在每种语言中,您都可以使用类似strftime的东西来转换日期。
- i32 -自epoch以来的时间可以转换回来。
我相信除了转换之外还有其他事情要考虑。
tldr;使用适当编码的字符串,除非有其他原因。
这取决于需要什么。这里有一些不同之处——请记住,现代计算机速度很快,转换可能只占整个应用程序时间的一小部分,所以"更多的处理"通常甚至不能适用于测量!
字符串(带有ISO 8601或更严格的XML dateTime):
- "more space"/"more processing" (见上文)/固定大小或可变大小
- 标准化区域性中立格式
- 人类可读和容易识别 支持时区
- 更大范围(-9999至9999)
- 更高/任意精度(最高1us)
- 按字典顺序排序(在同一时区和兼容格式内)
Epoch (UNIX变体):
- "less space"/"less processing"/固定大小
- 标准化文化中性格式
- 不是人类可读的(勤奋的程序员应该能够识别"about now")
- no时区(甚至不能区分"本地"和UTC)
- less range(1970 ~ 2034,带符号32位数字)
- less/fixed precision(1秒)
- 数值命令
(儒略历日是另一种与Epoch时间有许多相似之处的编码。)
结论:
除非空间/性能是已被证实的问题——这需要性能分析和功能需求——否则我会选择前者。今天的计算机比几年前的计算机快得多,比几十年前的计算机快得多。
您可能对temporenc (http://temporenc.org)感兴趣,这是一种用于日期和时间的全面二进制编码格式。