将byte []转换为DateTime会返回错误的年份

时间:2016-03-30 14:05:16

标签: c# datetime bytearray win-universal-app

我的应用程序是一个用C#编写的UWP应用程序。 我需要从文件中打开一个流,将8个字节读入byte [],然后将字节数组转换为DateTime。 我使用以下代码:

static public async Task<DateTime> GetDateTime(StorageFile FileName)
    {
        Stream inStream = await FileName.OpenStreamForReadAsync();
        byte[] dt = new byte[8];
        await inStream.ReadAsync(dt, 0, 8);
        long longDT = BitConverter.ToInt64(dt, 0);
        DateTime resDT = DateTime.FromBinary(longDT);
        return resDT;
    }

要读取的字节是:

C0 3B 12 D1 68 8A D1 01

应转换为&#34; 30/03/2016 09:44:55&#34;。

如果我运行我的应用程序,上面的代码将返回&#34; 30/03 / 0416 09:44:55&#34;,相差1600年。 我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

可以使用DateTime.FromFileTimeUtc修复1600年。

FromBinary - 此属性的值(Ticks)表示自0001年1月1日午夜12:00:00(1月1日0:00:00)以来经过的100纳秒间隔的数量,0001,在阳历中),

FromFileTimeUtc - Windows文件时间是一个64位值,表示自公元1601年1月1日午夜12:00(CE)协调世界时(UTC)以来经过的100纳秒间隔的数量)。

正如你所看到的,1600年的差异。

相关问题