Parquet 파일에 저장된 타임스탬프를 사용하여 작업할 때 int96으로 표시되는 데이터를 접하는 것이 일반적입니다. 데이터 유형. 이 12바이트 형식은 타임스탬프와 날짜 부분으로 구성됩니다. Go에서 이 int96 타임스탬프를 타임스탬프로 변환하는 방법을 이해하는 것은 데이터 조작 및 분석에 매우 중요합니다.
int96 타임스탬프를 디코딩하는 열쇠는 구조를 인식하는 데 있습니다. 처음 8바이트는 타임스탬프를 나노초로 나타내지만 역바이트 순서로 저장됩니다.
time_nano = ReverseBytes((timestamp[0:8]))
나머지 4바이트는 날짜를 율리우스력 일수로 나타냅니다.
julian_day = ReverseBytes((timestamp[8:12]))
다음 int96 타임스탬프를 고려하세요: [128, 76, 69, 116, 64, 7, 0, 0, 48, 131, 37, 0].
다음은 디코딩 프로세스를 보여주는 Go 코드 조각입니다.
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 }
위 내용은 int96 Parquet 타임스탬프를 Go의 time.Time으로 변환하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!