🌐
SharePoint REST API を使って日時をサイトのタイム ゾーンに変換する
SharePoint で表示される日時はコンピューターのタイム ゾーンではなく、サイトのタイム ゾーンで表示されます。内部的には日付は UTC で保存されており、表示時にサイトのタイム ゾーンに変換されて表示されます。ただし、SharePoint REST API を使った場合はサイトの設定とは関係なく UTC で日時を取得します。これは便利な場合もありますが、多くの場合、表示時にはタイム ゾーンに従って変換する必要があります。たとえば日本でのみ利用する場合は JST に固定して変換する方法もありますが、やはりサイトのタイム ゾーンに従って変換したいところです。
_api/web/RegionalSettings/TimeZone
を呼び出すとサイトのタイム ゾーンの設定を取得できますが、少し扱いづらいです。オフセットは取得できますが、計算する場合は夏時間なども考慮する必要があります。
{
"odata.metadata": "https://example.sharepoint.com/_api/$metadata#SP.ApiData.TimeZones/@Element",
"odata.type": "SP.TimeZone",
"odata.id": "https://example.sharepoint.com/_api/web/RegionalSettings/TimeZone",
"odata.editLink": "web/RegionalSettings/TimeZone",
"Description": "(UTC+09:00) 大阪、札幌、東京",
"Id": 20,
"Information": {
"Bias": -540,
"DaylightBias": -60,
"StandardBias": 0
}
}
このため、_api/web/RegionalSettings/TimeZone/UtcToLocalTime
というメソッドを使用します。このメソッドはパラメーターとして UTC の時間を渡すと、サイトのタイム ゾーンで変換された時刻を返します。
GET https://example.sharepoint.com/_api/web/RegionalSettings/TimeZone/UtcToLocalTime('2021-01-01T00:00:00Z')
Content-Type: application/json
{
"odata.metadata": "https://example.sharepoint.com/_api/$metadata#Edm.DateTime",
"value": "2021-01-01T09:00:00"
}
リクエストを送信する必要があるため多用は避けるべきですが、覚えておきたいテクニックです。
Discussion