在Apache Thrift中如何表示日期对象

时间:2013-01-10 23:52:15

标签: datetime thrift cross-language

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

  1. 字符串 - 在每种语言中,您都可以使用类似strftime的内容来转换日期。
  2. i32 - 时间可以转换回来的时间。
  3. 我确信除了转换之外还有其他事情要考虑。希望那里的人有一些很好的反馈。

2 个答案:

答案 0 :(得分:9)

tldr; 使用适当编码的字符串,除非有理由不这样做。

这取决于所需要的。以下是一些差异 - 请记住现代计算机快速并且转换可能只是整个应用程序时间的一小部分,因此“更多处理”通常甚至不适用于可测量!

字符串(ISO 8601或更严格的XML dateTime):

  • “更多空间”/“更多处理”(见上文)/固定大小或可变大小
  • 标准化文化 - 中性格式
  • 人类可读且易于识别
  • 支持时区
  • 更多范围(-9999至9999)
  • 更多/任意精度(最高1us)
  • 按字典顺序排列(在相同时区和兼容格式内)

Epoch(UNIX变体):

  • “less space”/“less processing”/ fixed size
  • 标准化的文化中立格式
  • 人类可读(勤奋的编码员应该能够识别“现在”)
  • 没有时区(甚至无法区分“本地”和UTC)
  • less 范围(1970年至2034年,带有签名的32位数字)
  • less /固定精度(1秒)
  • 以数字方式订购

Julian day是另一种编码,与纪元时间有许多相似之处。)

结论:

除非空间/性能 是一个经过验证的问题 - 这需要性能分析和功能要求 - 我选择前者。今天的计算机比几年前的计算机要好得多,并且比数十年前的计算机快得多。

答案 1 :(得分:1)

对于后代,您可能对temporenc(http://temporenc.org)感兴趣,这是一种全面的日期和时间二进制编码格式。