2017-12-09 28 views
4

こんにちは。 私たちのシステムに来る受信日時の値を文字列形式に変換しようとしています。ミリ秒単位の精度が7より大きい場合、.NETでの日時解析は値が気に入らないようで、値を変換/解析できないようです。私はこのために何をしなければならないのですか?私の現在の唯一の考えは、ミリ秒のサイズには限界があり、それ以上の精度は不可能であるということですか?しかし、私はこれが前提ではなく事実であることを確認したい。 例:私はちょうど7までの「F」の値を減らす場合.NET datetime文字列からdatetimeへの変換時のミリ秒精度の問題

string candidateDateTimeString = "2017-12-08T15:14:38.123456789Z"; 
if (!success) 
     { 
      success = DateTime.TryParseExact(trayportDateTimeString, "yyyy- 
MM-dd'T'HH:mm:ss.fffffffff'Z'", 
       CultureInfo.InvariantCulture, dateTimeStyles, out dateTime); 
     } 

、その後、日付時刻の解析が正常に動作します。限界はありますか?または私は間違った何かを明らかにしていますか?

+0

DateTimeの精度は最大7桁ですが、これ以降のデータはすべてそこに格納できないため、そのようなフォーマットは許可されていません。 – Evk

+1

DateTimeが格納できる時間の最小増分は100ナノ秒です。それは分数の7桁です。 8番目以降の数字を静かに無視するのではなく、間違っていると伝えます。これにより、文字列に戻ったときに、同じ数字が得られることが保証されます。信頼できるラウンドトリップが重要です。それに、正確な時計は手に入れることができません。地下室に保管するのは装置の種類ではありません。 –

答えて

3

Custom Date and Time Format Stringsドキュメントによれば、図7は、第2の画分のサポートされる最大桁数です。

+0

ありがとうございます!私は怒っていると思った:) – sridg

0

精度は、あなたが思っているよりもっと複雑です。関与精度の異なるレベルがあります。DateTime

DateTime格納する64ビット値として01.01.0001午後12時以降のティック数の

精密。 1ダニは100ナノ秒です。これは格納できる最大の精度であるため、それより高い精度でフォーマットするのは意味がありません。より高い精度を表現するのに必要な数だけゼロを追加することができます。 100ナノ秒よりも短い時間を表す必要がある場合は、Int64などのカスタムティックサイズの異なるタイプを使用する必要があります。 DateTime.Now

精密あなたがDateTime.Nowを呼び出し、あなたはDateTime格納できるよりもはるかに低い精度を得ることができます。正確な値はシステムクロックに依存しますが、通常はミリ秒の範囲です。 Stopwatch

精度は、あなたのシステムに応じて、Stopwatchとの時間を計測するときは、高性能クロックから時間を頂く場合がございますDateTime.Nowのために使用されるクロックよりも正確、まだ少ないいます100ナノ秒より長い。高性能クロックのないシステムでは、精度は通常のシステムクロックの1つです。

概要

あなたがDateTimeの完全な精度にそれを解析し、(原子時計のような)高精度クロックに由来を解析している価値がない限り、あまり実用的な意味があります。そのようなソースから来た場合は、値を表すために別のデータ型に頼る必要があります。