🌐

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