在Apache Thrift中,日期对象应该如何表示?



在Thrift IDL中没有Date类型。表示日期对象的最佳跨语言机制是什么?我认为有两个理想的候选人,但我想听听其他的想法。

  1. 字符串-在每种语言中,您都可以使用类似strftime的东西来转换日期。
  2. 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)感兴趣,这是一种用于日期和时间的全面二进制编码格式。

相关内容

  • 没有找到相关文章

最新更新