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

Bry*_*n M 7 datetime thrift cross-language

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

  1. 字符串 - 在每种语言中,您可以使用strftime之类的东西来转换日期.
  2. i32 - 时代可以转换回来的时间.

我确信除了转换之外还有其他事情要考虑.希望那里的人有一些很好的反馈.

小智 10

tldr; 除非有其他原因,否则请使用适当编码的字符串.

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

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

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

Epoch(UNIX变体):

  • "较少的空间"/"较少的处理"/固定的大小
  • 标准化的文化中立格式
  • 不是人类可读的(勤奋的编码员应该能够识别"关于现在")
  • 没有时区(甚至无法区分"本地"和UTC)
  • 较小的范围(1970年至2034年,带有签名的32位数)
  • 更少 /固定精度(1秒)
  • 按数字排序

(朱利安日是另一种与大纪元时期有许多相似之处的编码.)

结论:

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