2016-03-30 10 views
1

私のアプリケーションはC#で書かれたUWPアプリです。 ファイルからストリームを開き、8バイトをバイト[]に読み込み、バイト配列をDateTimeに変換する必要があります。私は次のコードを使用してい :読み込むバイト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; 
    } 

は以下のとおりです。

"30/03/2016午前9時44分55秒" に変換する必要があり
C0 3B 12 D1 68 8A D1 01 

私のアプリを実行すると、上記のコードは "30/03/ 09:44:55"という1600年の差を返します。 私のコードで何が問題になっていますか?

+0

ファイルをどのようにシリアル化しましたか? – Default

答えて

2

DateTime.FromFileTimeUtcを使用して1600年を修正することができます。

FromBinary - このプロパティの値(Ticks)は、0001年1月1日午前12時00分(0001年1月1日0:00:00 UTC)から経過した100ナノ秒の間隔の数を表します。

FromFileTimeUtc - Windowsファイル時間は、1601年1月1日12:00(AD)のCoordinated Universalから経過した100ナノ秒の間隔の数を表す64ビット値です。時間(UTC)。

ご覧のとおり、1600年の違いがあります。

+0

これは次のようになります。System.ArgumentOutOfRangeException以外の情報が表示される HResult = -2146233086 メッセージ=有効なWin32 FileTimeではありません。 パラメータ名:FILETIME のparamName = FILETIME ソース= mscorlib のStackTrace:System.DateTime.FromFileTimeUtc(Int64型FILETIME)で CZIPGenius.czip4 d__10.MoveNext() で---からスタックトレースの終わり。例外がスローされた前の場所--- – ZipGenius

関連する問題