scala - Int96Value 到日期字符串
问题描述
读取镶木地板文件(使用 Scala)时,我将时间戳字段读取为:
Int96Value{Binary{12 constant bytes, [0, 44, 84, 119, 54, 49, 0, 0, -62, -127, 37, 0]}}
如何将其转换为日期字符串?
解决方案
我为你做了一些研究。Int96
格式非常具体,似乎已被弃用。
这是关于转换Int96
为Date
.
基于此,我创建了以下代码:
def main(args: Array[String]): Unit = {
import java.util.Date
import org.apache.parquet.example.data.simple.{Int96Value, NanoTime}
import org.apache.parquet.io.api.Binary
val int96Value = new Int96Value(Binary.fromConstantByteArray(Array(0, 44, 84, 119, 54, 49, 0, 0, -62, -127, 37, 0)))
val nanoTime = NanoTime.fromInt96(int96Value)
val nanosecondsSinceUnixEpoch = (nanoTime.getJulianDay - 2440588) * (86400 * 1000 * 1000 * 1000) + nanoTime.getTimeOfDayNanos
val date = new Date(nanosecondsSinceUnixEpoch / (1000 * 1000))
println(date)
}
但是,它打印Sun Sep 27 17:05:55 CEST 2093
. 我不确定,如果这是您所期望的日期。
编辑:Instance
按照建议使用:
val nanosInSecond = 1000 * 1000 * 1000;
val instant = Instant.ofEpochSecond(nanosecondsSinceUnixEpoch / nanosInSecond, nanosecondsSinceUnixEpoch % nanosInSecond)
println(instant) // prints 2093-09-27T15:05:55.933865216Z
推荐阅读
- llvm - LLVM API 中的 IRBuilderBase 和 BinaryOperator 有什么区别?
- python - python:如何从桌面应用程序重定向到url,等待用户接受授权并获取授权码
- r - 使用 parApply 时如何更正“第一个错误:'arg' 必须为 NULL 或字符向量”?
- reactjs - 规范链接未显示在页面源 react-helmet reactjs no ssr
- python - 如何使用 Torch 初始化 GPU
- ansible - 使用 ansible 插入 etc hosts 文件
- google-cloud-run - Cloud Run:服务到服务 401,而 curl 工作
- c - 如何将 TCL 和 Shell 脚本连接到 C/C++ 或任何其他语言?
- jenkins - Jenkins 和 Nexus 存储库管理器选择参数
- api - Google Pub/Sub API 限制