3

値のタイムスタンプが634876488000000000あり、予想される日付は04th November 2012, 18:00:00です。ただし、変換すると、年は(日、月、時間はすべて正しい)では3612なくなります。2012

次に例を示します。

Console.WriteLine(DateTime.FromFileTimeUtc(634876488000000000).ToString());
Console.WriteLine(DateTime.FromFileTime(634876488000000000).ToString());

そして出力:

04/11/3612 18:00:00
04/11/3612 18:00:00

さらに調査したところGet-Date 634876488000000000、Powershell で使用すると、正確な予想される日付が取得されることがわかりました04 November 2012 18:00:00

C#を使用してタイムスタンプを.NET DateTimeオブジェクトに正しく変換する方法を誰か説明してもらえますか?

4

3 に答える 3

6

私の最初の推測では、数値はDateTime.Ticksであり、Visual Studio で次のことを試してみたところ、取得できました。{04/11/2012 6:00:00 PM}為に:

DateTime dt = DateTime.MinValue.AddTicks(634876488000000000);

または、ティックをパラメーターとして受け取る DateTime コンストラクターを使用します。

DateTime dt = new DateTime(634876488000000000);
于 2013-03-06T11:42:39.963 に答える
3

API で定義されている適切な Windows FILETIMEは、1601 年 1 月 1 日午前 0 時 (UTC) からのティック数です。つまり、1601-01-01T00:00:00Z. それはあなたが持っているものではないようです。そのため、1601 年ずれています。

0001 年 1 月 1 日の午前 0 時以降のティック数があるようです。使用しているのはそれGet-Dateだけで、DateTime の単一の整数コンストラクターが使用するのはこれだけです。

DateTime ntepoch = new DateTime(1601,1,1,0,0,0,DateTimeKind.Utc); // Ticks is 504911232000000000
Console.WriteLine(DateTime.FromFileTimeUtc(634876488000000000 - ntepoch.Ticks));
Console.WriteLine(DateTime.FromFileTime(634876488000000000 - ntepoch.Ticks));
Console.WriteLine(new DateTime(634876488000000000)));

私の場合、タイムゾーン GMT-5 では、次のように出力されます。

11/4/2012 6:00:00 PM
11/4/2012 1:00:00 PM
11/4/2012 6:00:00 PM
于 2018-12-03T17:17:25.507 に答える
0

DateTime(long ticks) コンストラクターを使用して、正しい日付を取得できます。

Console.WriteLine((new DateTime(634876488000000000)).ToString());
于 2013-03-06T11:43:44.527 に答える