[料理佳餚] Azure App Service 及 SQL Database 預設時區的問題

如果是自架 IIS、SQL Server 伺服器,取得當前時間是看伺服器設定的時區在哪裡,就會拿到當地時區的當前時間,但是我們使用 Azure 提供的 PaaS 服務,只管用不必管伺服器,首要注意的是取得當下時間的 API 預設時區 UTC 的問題,務必在上雲之前針對自己的程式調整一番。

App Service

App Service 要調整時區稍微容易一些,只要在「應用程式設定」中去增加一個設定名稱「WEBSITE_TIME_ZONE」,值輸入「Taipei Standard Time」,應用程式取得的當前時間就是台灣時間。

SQL Database

SQL Database 就比較麻煩了,目前還沒有一個比較方便的方法像 App Service 加個什麼參數就搞定了,如果是新開發的專案還好,但是如果是已經開發好的專案要上雲就要掃一下 SQL 語法,將 GETDATE() 置換掉。

我使用的 SQL Database 版本是 12.0.2000.8,支援 AT TIME ZONE 語法,可以直接對取得的時間變更時區。

SELECT CONVERT(DATETIME, SYSDATETIMEOFFSET() AT TIME ZONE 'Taipei Standard Time')

最終我建了一個純量值函式來取得當前的台灣時間,以取代 GETDATE() 函式。

CREATE FUNCTION [dbo].[GETDATE_TW]
(
)
RETURNS DATETIME
AS
BEGIN

    RETURN CONVERT(DATETIME, SYSDATETIMEOFFSET() AT TIME ZONE 'Taipei Standard Time')

END

參考資料