C# 将ParquetSharp.Int96转换为System.DateTime

C# 将ParquetSharp.Int96转换为System.DateTime,c#,C#,我正在使用拼花竖琴读取拼花文件。其中一列的类型为Int96。实际上,这是一个约会时间。我需要将上述ParquetSharp.Int96转换为System.DateTime。我使用Int96类型的奇怪命名的int a、int B、int C属性来完成这项工作。这些属性对应于组成int96的4字节块 使用此处找到的信息: (这些链接中提到了一些神奇的数字。) 我能想到这个: DateTime ConvertToDateTime(Int96 typed) { var date = DateT

我正在使用拼花竖琴读取拼花文件。其中一列的类型为Int96。实际上,这是一个约会时间。我需要将上述ParquetSharp.Int96转换为System.DateTime。

我使用Int96类型的奇怪命名的int a、int B、int C属性来完成这项工作。这些属性对应于组成int96的4字节块

使用此处找到的信息:

(这些链接中提到了一些神奇的数字。)

我能想到这个:

DateTime ConvertToDateTime(Int96 typed)
{
    var date = DateTime.FromOADate(typed.C - 2415018.5);
    var a = BitConverter.GetBytes(typed.A);
    var b = BitConverter.GetBytes(typed.B);

    var nano = a.Concat(b).ToArray();

    var nanoLong = BitConverter.ToInt64(nano, 0);

    var result = date.AddTicks(nanoLong / 100);
    return result;
}