トピックス

知識創造研究室 by CRM(xRM)

Dynamics365 日付項目のインポートで値がずれる問題

みなさん、こんにちは。

今回は、Dynamics365を導入中のお客様のところで発生した、日付項目に関する事象について、その原因と解決策についてご紹介します。また、2月も終わりに差し掛かっておりますが、ちょうど「この時期」にまつわるネタでもあります。

発生現象の確認

以下は営業案件のビューです。ここに、日付項目「推定クローズ日」が出ています。

この日付項目の値を、Excelインポートで更新したが、Excelに記載した日付の値と1日ずれてしまったという連絡を、お客様から受けました。

「日付が1日ずれる」と聞くと、TimeZoneが悪さをしているのではないかと思いながら、実際にインポートを試してみました。しかし、素朴にインポートで日付を設定するだけでは、事象は再現しませんでした。

さらに詳しく話を聞くと、お客様の中では「1900/1/1」という日付を、特別な値として設定されたいようで(「未設定」のようなニュアンスで使われるそうです)この日付を設定しようとする時だけ1日ずれるということでした。

そこで、「1900/1/1」を含めた、いくつかの日付で、インポート時の動作を試してみました。

先ほどのビューから、データをExcelにエクスポートします。

エクスポートしたExcelファイル上で、いくつか、年代の違う1月1日を設定してみます。

このExcelファイルをインポートした結果が下記です。


確かに、「1900/1/1」を設定しようとしたレコードだけが、その1日前の「1899/12/31」となり、それ以外のレコードは、設定どおりの年の1月1日になりました。

設定する値によって、ずれるかずれないか、結果が変わるようです。
そこでさらに細かく、この事象が発生する日付の条件を調べていったところ、1900年の1月~2月では事象が発生するが、1900年の3月以降では発生しないということがわかりました。

閏年についてのおさらい

この事象ですが、結論としては、原因は「閏年」に関係するものでした。具体的には、「1900年」という年に対して、これが「閏年であるかどうか?」の判定が問題となっていました。

そこで、まず、基礎知識ですが、ある西暦年が閏年になる条件をおさらいしましょう。
※2月が28日までしかない年を「平年」、2月が29日まである年を「閏年」と呼びます。

(1) 4の倍数でない年は、平年である。
(2) 4の倍数の年は、閏年となる。
(2-1)ただし、100の倍数の年は、平年になる。
(2-1-1)ただし、400の倍数の年は、閏年となる。

基本的に、2020年とか2024年のように、「4の倍数」の年が閏年となりますが、100の倍数(下2桁が「00」)の場合は要注意です。
2100年とか2200年は、4の倍数ではありますが、例外的に平年となります。
また、2000年とか2400年のように、400の倍数(下2桁が「00」で、かつ上の2桁が4の倍数)のときは、100の倍数のグループの中でもさらに例外的に、閏年となります。

1900年は閏年か?

上記を踏まえますと、1900年というのは、「100の倍数であるが400の倍数でない」ので、平年となるのが正しいです。

しかし、実は、Dynamicsとしては1900年を平年と認識している(正しい)のに、Excelは閏年と認識しています(間違い)。

参考ページ:Excel では、1900年がうるう年であると誤って想定しています

https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year

試しに、Dynamicsのフォーム画面上に配置された日付項目で、カレンダーを見ながら日付を設定してみましょう。


1900年2月のカレンダーは、2月が28日までになっているので、平年扱いです。(正しい)

一方、Excel上で、適当なセルに「1900年2月20日」などと打ち込んでから、オートフィルで3月までの連続する値を入れてみましょう。


すると、2月28日と3月1日の間に2月29日が設定されるので、Excelでは閏年と認識している(誤り!)ことがわかります。

この現象が原因となって、Excel上で「1900年2月以前」の値を入力してDynamicsにインポートすると、想定より1日ずれてしまうとのことです。

なお本件の顛末としては、Excel側の問題は対処するのが難しいことと、1900年という限定的な設定値のみで発生することから、お客様側で運用で回避することになりました(1900/1/1を設定したいときだけ、Excelに記入する日付を1日ずらす)。

このように、Dynamics365は、他のいろいろなMicrosoft製品との連携を売りにしている都合上、トラブルの調査を行った結果、他の製品の問題に行き着くこともある訳です。

この記事を書いた人
s.motokawa

2013年に某大型プロジェクトでDynamics CRMに出会い、2018年よりArtisan(Arcuss Japan)へ。
今後も様々なDynamics案件を通じて、ノウハウをさらに積み上げていきたいです。

同じカテゴリの記事

Translate »