2013-01-10 41 views
6

在Thrift IDL中沒有日期類型。什麼是表示日期對象的最佳交叉語言機制。我認爲有2個理想的候選人,但我很想聽聽其他想法。在Apache Thrift中應如何表示日期對象

  1. 字符串 - 在每種語言中,您可以使用類似strftime的東西將日期轉換回來。
  2. i32 - 自時代以來的時間可以轉換回來。

我相信除了轉換之外還有其他的事情需要考慮。希望那裏的人有一些好的反饋。

+0

使用i64來表示數據對象。 – faylon

回答

8

tldr;使用適當編碼的字符串,除非有其他原因。

這取決於需要什麼。這裏有一些差異 - 請記住現代計算機很快並且轉換可能只是整個應用程序時間的一小部分,所以「更多處理」通常甚至不是可測量的!

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

  • 「更多的空間」/ 「更多的處理」(見上文)/固定大小或可變大小
  • 標準培養-諾伊塔爾格式
  • 人類可讀和容易辨認
  • 支持時區
  • 更多範圍(-9999〜9999)
  • 更多/任意精度(最多爲1us)
  • 字典順序(相同的時區和兼容的格式內)

曆元(UNIX變體):

  • 「更小的空間」 /「較少的處理」 /固定尺寸
  • 標準培養中立格式
  • 人類可讀(勤奮譯碼器應該能夠「現在大約」來標識)
  • 沒有時區
  • 更少範圍(甚至不能「本地」和UTC之間區分)(1970到2034一符號的32位號碼)
  • 更少 /固定精度(1秒)
  • 數值有序

(該Julian day是另一種編碼與時代有許多相似之處。)

結論:

除非空間/性能一個成熟的問題 - 這需要一個性能分析和功能要求 - 我會選擇前者。今天的計算機比幾年前的計算機要快很多,並且比計算機數十年前快得多。

+0

這個答案。人類可讀的日期時間表示節省了大量的調試時間。 – misaxi

+0

這很可能永遠不會被讀取,但是「沒有時區」是UNIX時間戳的*優點*之一。所有時間總是以UTC表示。簡單,簡單,有效,不含糊。 –

1

只是爲了後人,您可能會對temporenc(http://temporenc.org)感興趣,這是一種用於日期和時間的綜合二進制編碼格式。

相關問題