Int96 タイムスタンプを Parquet から Go に変換する
ここでのタスクには、Parquet 形式で保存された 12 バイトの int96 タイムスタンプを、 Go と互換性のあるタイムスタンプ。 int96 形式は、タイムスタンプを 12 バイトの順序付き配列として受け入れます。最初の 8 バイトはナノ秒単位の時間を表し、残りの 4 バイトはユリウス日番号で日付を表します。
詳細な変換プロセス:
-
時間の順序を逆転するBytes: Int96 タイムスタンプは逆バイト順序を利用します。したがって、時間バイト (最初の 8 バイト) を反転する必要があります。
-
ナノ秒単位で時間を計算する: 反転された時間バイトを整数として解釈して、ナノ秒単位の時間を決定します。
-
ユリウス日番号を取得します: 残りの 4 バイトを反転して、ユリウス日番号。
-
ユリウス日番号を日付に変換: ライブラリまたは関数を使用して、ユリウス日番号を日付オブジェクトに変換します。
例:
int96 タイムスタンプを 12 バイトとみなします配列: [128 76 69 116 64 7 0 0 48 131 37 0]
- 時間バイトを反転します: [0 0 0 0 29 32 4B FD 60]
- ナノ秒に変換します: 0x60FD4B3229000000 = 45296 * 10^9 ナノ秒
- 日付バイトを反転します: [0 25 68 59]
- ユリウス日番号に変換します: 0x59682500 = 2451545
- 日付に変換: 適切なライブラリ/関数を使用して、ユリウス日番号を対応する日付に変換します。この場合、2000-01-01
以上がParquet Int96 タイムスタンプを Go タイムスタンプに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。