Apabila bekerja dengan cap masa yang disimpan dalam fail parket, adalah perkara biasa untuk menemui data yang diwakili sebagai int96 jenis data. Format 12-bait ini terdiri daripada cap masa dan bahagian tarikh. Memahami cara menghantar cap waktu int96 ini kepada cap masa dalam Go adalah penting untuk manipulasi dan analisis data.
Kunci untuk menyahkod cap waktu int96 terletak pada mengenali strukturnya. Lapan bait pertama mewakili cap masa sebagai nanosaat, tetapi disimpan dalam susunan bait terbalik.
time_nano = ReverseBytes((timestamp[0:8]))
Empat bait yang selebihnya mewakili tarikh sebagai nombor hari Julian.
julian_day = ReverseBytes((timestamp[8:12]))
Pertimbangkan cap masa int96 berikut: [128, 76, 69, 116, 64, 7, 0, 0, 48, 131, 37, 0].
Berikut ialah coretan kod Go yang menunjukkan proses penyahkodan:
package main import ( "fmt" "math" ) func main() { // Sample int96 timestamp timestamp := []byte{128, 76, 69, 116, 64, 7, 0, 0, 48, 131, 37, 0} // Reverse the first 8 bytes for time (nanoseconds) timeNano := reverseBytes(timestamp[0:8]) // Reverse the last 4 bytes for date (Julian day number) julianDay := reverseBytes(timestamp[8:12]) // Convert timestamp nanoseconds to seconds seconds := float64(timeNano) / math.Pow(10, 9) // Calculate the timestamp t := time.Unix(int64(seconds), 0) // Create a new time object with date set from Julian day number t = t.AddDate(int(julianDay/365.25-2440587.5), 0, int(julianDay%365.25)) fmt.Println(t) } func reverseBytes(bytes []byte) uint64 { var result uint64 for _, v := range bytes { result = result << 8 | uint64(v) } return result }
Atas ialah kandungan terperinci Bagaimana untuk Menukar Cap Masa Parket int96 kepada time.Time Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!