« [.NET] (続) フィードバック - WPF: テキストボックスに Maxlength の長さの日本語文字列が入力できない | トップページ | [VS2008] FAQ: TFS には、 本当に3つの異なるアカウントが必要? »

2008年11月20日 (木)

.NET F/W と SQL Server では、 3ミリ秒違う

どちらの DateTime も、 最大値は 9999年 12月 31日 …で。
じつは、 その日の 23時 59分 59秒 で。 ( ここまでは、 覚えていた f(^^; )

ところがなんと !!
その下のミリ秒の桁で違っていたんですねぇ。 なんたる迂闊 ! orz

I don't like having Nulls in DateTime columns

  Min Date Max Date
.Net 0001-01-01 00:00:00.000 9999-12-31 23:59:59.999
SQL Server 1753-01-01 00:00:00.000 9999-12-31 23:59:59.997

※ この表では 2ミリ秒の差に見えますが、 切り捨てているので正確には 2.9999ミリ秒の差になっています。
long diff = (DateTime.MaxValue).Subtract(SqlDateTime.MaxValue).Ticks;
Assert.AreEqual<long>(29999, diff); // 29999 x 100nS = 2999.9pS = 2.9999mS

なお、 DateTime.MaxValue より 3ミリ秒小さい、 この SQL Server の最大日付を表す定数が、 ちゃんと切ってありました。 上のコードにも書いた、 SqlDateTime.MaxValue です。  → System.Data.SqlTypes.SqlDateTime.MaxValue

|

« [.NET] (続) フィードバック - WPF: テキストボックスに Maxlength の長さの日本語文字列が入力できない | トップページ | [VS2008] FAQ: TFS には、 本当に3つの異なるアカウントが必要? »

プログラミング」カテゴリの記事

コメント

なぜ!?

投稿: aetos | 2009年9月24日 (木) 21時22分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: .NET F/W と SQL Server では、 3ミリ秒違う:

« [.NET] (続) フィードバック - WPF: テキストボックスに Maxlength の長さの日本語文字列が入力できない | トップページ | [VS2008] FAQ: TFS には、 本当に3つの異なるアカウントが必要? »