15年は正しい結果です。正常に動作しています。問題は、コントロールパネルの地域と言語のオプションで日付の形式を和暦にしている場合に発生します。パネル】-【地域と言語のオプション】の【地域オプション】タブ内で、【カスタマイズ】ボタンをクリックします。【日付】タブを開き、【カレンダーの種類】を和暦に設定し、【OK】ボタンをクリックしてダイアログを閉じます。この状態で、先ほどのプログラムを実行すると、以下のようになります。DateDiff()で正常な値を取得できません。いうような計算をしてしまっているようなのです。OSの日付の設定が和暦であろうとも、この計算は仕様としては不自然ですし、通常の処理として上記のような結果を求める意味がありません。不具合だと思われますが、現段階ではOSの設定を和暦にしている人用に対処用のコードを書く必要があります。対処法DateDiff()の不自然な結果は、現在のスレッドのカルチャ(Threading.Thread.CurrentThread.CurrentCulture)に依存しています。Threading.Thread.CurrentThread.CurrentCultureに設定されている値は、ユーザーのOSの設定を引き継いでいるため、処理によってはユーザーの好みにあわせた表示形式を使用でき便利な面もありますが、DateDiff()の場合は明らかに挙動がおかしいです。カルチャに依存しないCaltureInfoを設定してから、DateDiff()を実行することで対処します。originalCaltureそれにしても、特に年号なんてない文化圏のユーザーは、こんなことは意識できないでしょうから、期待しない動作になりやすく、ちょっと困りものですね...追記この問題は、Microsoftにフィードバックを投稿済みです。次のページをご参照ください。(2)2件のコメント»DateDiffのヘルプに以下の記述があります。すれば簡単に西暦での年の差が求められるようです。メソッドは差を年数で返しません。プロパティが返した値の違いを計算できます。情報ありがとうございます。ヘルプの記述は私が出したフィードバックを元に追記されたものと思いますが、Connectのページがすでにリンク切れになっているようです。「DateDiffが返すのは単なる年の差ではなく、2つのDateの間にいくつの年の変化があるのかという概念であるため、DateDiffで複数のEraをまたぐ場合の挙動については、どういった計算が正しいとは一概に言えない。考えるのか1と考えるのか判断が分かれる)DateDiffの挙動は修正せずに代わりにDateDiffのヘルプにカルチャによって挙動が変わることの注意書きを載せる。Frameworkの修正はなしという結論で終わっています。仰る通り、差を求める場合はYearの差分を求めるのが正解と思われます。