首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TAI64N到DateTime

TAI64N到DateTime
EN

Stack Overflow用户
提问于 2016-08-17 10:56:39
回答 1查看 153关注 0票数 0

我有许多以TAI64N格式here is a reference命名的文件。在BitConverter.ToInt64的帮助下,当我尝试使用这个source时,结果是否定的

代码语言:javascript
复制
static void Main ( string[] args ) {
    string[] filenames = new string[4]{
        "4000000057b23bf30017a4bc",
        "4000000057b23ef61dedacac",
        "4000000057b24b1c2bab0614",
        "4000000057b24ca521a230fc"
    };
    foreach (string filename in filenames) {
        byte[] hexToBytes = StringToByteArray(filename);
        long bytesToLong = BitConverter.ToInt64(hexToBytes, 0);
        Console.WriteLine(bytesToLong); // Negative?
        DateTime longToDateTime = new DateTime(bytesToLong);
    }
}

public static byte[] StringToByteArray ( string hex ) {
    return Enumerable.Range(0, hex.Length)
        .Where(x => x % 2 == 0)
        .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
        .ToArray();
}

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 19:47:20

您是否考虑过TAI64N值的endiannes与处理器之间的差异?我假设您使用的是x86-64处理器,它是小端的,而TAI64N值是大端的。BitConverter类的方法使用处理器字符顺序来转换值(see Remarks section

我建议您尝试颠倒数组中的字节顺序:

代码语言:javascript
复制
public static byte[] StringToByteArray ( string hex ) {
    byte[] arr = Enumerable.Range(0, hex.Length)
        .Where(x => x % 2 == 0)
        .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
        .ToArray();
    Array.Reverse(arr);
    return arr;
}

以及随后的long bytesToLong = BitConverter.ToInt64(hexToBytes, 4);

顺便说一句,我注意到你使用了new DateTime(long ticks)构造函数(reference,但是你给它提供了秒数(根据TAI64N规范),而不是节拍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38987385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档