【比較検証】3ステップで進化させる資産管理アプリ
Step 7 / 7
[探求] SharePointリストとDataverseの日付差分の発生を調べる
SharePointリストからコピーし、Dataverseに貼り付けると、なぜ日付の差が発生するのか。
SharePointリストとDataverseの日付比較
ステップ5で行った、日付データの手動コピー結果を下表に比較します。
| No. | SharePointリストの日付 | SharePointリストのシリアル値 | Dataverseの日付 | Dataverseのシリアル値 |
|---|---|---|---|---|
| 01 | 2024/04/15 0:00 | 1713106800 | 2083/08/03 0:00 | 3584511600 |
| 02 | 2023/11/10 0:00 | 1699542000 | 2078/07/10 0:00 | 3424700400 |
| 03 | 2024/01/20 0:00 | 1705676400 | 2088/07/31 0:00 | 3741961200 |
| 04 | 2023/09/25 0:00 | 1695567600 | 2093/07/08 0:00 | 3897826800 |
| 05 | 2025/02/01 0:00 | 1738335600 | 2069/09/01 0:00 | 3145196400 |
| 06 | 2024/06/12 0:00 | 1718118000 | 2080/08/05 0:00 | 3490018800 |
| 07 | 2022/08/30 0:00 | 1661785200 | 2098/06/07 0:00 | 4052953200 |
| 08 | 2023/05/18 0:00 | 1684335600 | 2086/07/04 0:00 | 3676642800 |
| 09 | 2021/12/05 0:00 | 1638630000 | 2073/05/11 0:00 | 3261654000 |
| 10 | 2024/10/10 0:00 | 1728486000 | 2078/08/09 0:00 | 3427292400 |
日付データだけではなく、シリアル値にして比較します。
例えば、No.1でコピーして貼り付けると日付が大きく変わり、シリアル値に変換すると1713106800と3584511600で表せます。
同じ日付を貼り付けた時に差分が出るということは、2つの数値の間にオフセットが入っていると考えられます。
日付のシリアル値の出し方
シリアル値は基本的に、下記の式で計算されます。
S = 指定日 - 基準日
つまり、1713106800と3584511600は、基準日時点から経過した値です。
日付の差(オフセット)
差分の原因=定義の違い
差分の原因は、SharePointとDataverseの定義(基準日、表し方など)の違いにあります。
- SharePoint:
基準日は「1900年1月0日(1899/12/31)」、シリアル値は日数、単位は日、Excel仕様 - Dataverse:
基準日は「1970年1月1日(1970/01/01 00:00:00 UTC)」、シリアル値は秒数、単位は秒、UNIX時間の公式定義
下記は比較表です。
| 項目 | SharePoint | Dataverse |
|---|---|---|
| 基準日 | 1900年1月0日(1899/12/31) | 1970年1月1日(1970/01/01 00:00:00 UTC) |
| シリアル値 | 日数 | 秒数 |
| 単位 | 日 | 秒 |
| 仕様 | Excel仕様 | UNIX時間の公式定義 |
計算工程の細分化
上記をもとに計算工程を細分化すると、下表になります。
※計算結果にズレがあります
32400秒=9時間 ※UTCとの時差
86400秒=1日 ※うるう年
| A | B | C(A-B) | D | E(D-B) | F(C-E) | G | H(F*G) - 32400 + 86400 | I(D*H) |
|---|---|---|---|---|---|---|---|---|
| SharePoint日付 | SharePoint基準日 | SharePointシリアル値 | Dataverse基準日 | DataverseとSharePoint差分 | Dataverse換算値 | 1日のシリアル値 | Dataverseシリアル値 | Dataverse日付 |
| 2024/4/15 0:00 | 1900/1/1 | 45396 | 1970/1/1 | 25569 | 19827 | 86400 | 1713106800 | 2083/6/7 |
| 2023/11/10 0:00 | 1900/1/1 | 45239 | 1970/1/1 | 25569 | 19670 | 86400 | 1699542000 | 2081/12/23 |
| 2024/1/20 0:00 | 1900/1/1 | 45310 | 1970/1/1 | 25569 | 19741 | 86400 | 1705676400 | 2082/8/20 |
| 2023/9/25 0:00 | 1900/1/1 | 45193 | 1970/1/1 | 25569 | 19624 | 86400 | 1695567600 | 2081/7/21 |
| 2025/2/1 0:00 | 1900/1/1 | 45688 | 1970/1/1 | 25569 | 20119 | 86400 | 1738335600 | 2086/2/18 |
| 2024/6/12 0:00 | 1900/1/1 | 45454 | 1970/1/1 | 25569 | 19885 | 86400 | 1718118000 | 2083/12/20 |
| 2022/8/30 0:00 | 1900/1/1 | 44802 | 1970/1/1 | 25569 | 19233 | 86400 | 1661785200 | 2077/12/8 |
| 2023/5/18 0:00 | 1900/1/1 | 45063 | 1970/1/1 | 25569 | 19494 | 86400 | 1684335600 | 2080/5/8 |
| 2021/12/5 0:00 | 1900/1/1 | 44534 | 1970/1/1 | 25569 | 18965 | 86400 | 1638630000 | 2075/6/16 |
| 2024/10/10 0:00 | 1900/1/1 | 45574 | 1970/1/1 | 25569 | 20005 | 86400 | 1728486000 | 2085/1/28 |
Dataverseのbehavior(振る舞い)
上表の微妙な計算結果のズレに関し、Dataverseでは値の保存時、ユーザーローカル時間に変換される仕様があります。
また、シリアル値の計算過程においては、日→秒への変換、時差、うるう年などの要因もあり、正確な式を用いないとズレます。
そのため、DataverseとSharePointの間でデータを移行する際、変換処理は正しく行うことが必要です。
もっとも、ステップ4に記載した通り、テキスト貼り付けの場合は、そもそもこの問題は発生しません。
広告