💻

SharePoint REST API を使って日時をサイトのタイム ゾーンに変換する

2022/01/14に公開

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