はじめに
Pleasanter を Windows Server 上で動かし、データベースに Azure SQL Database を利用していたところ、更新日時が日本時間より9時ズレて表示される問題に遭遇しました。
最終的には、Windows Server のタイムゾーンを UTC に変更することで解決しました。
環境
今回の環境は以下です。
- Pleasanter : 1.5.2.0
- OS : Windows Server
- DB : Azure SQL Database
- OSタイムゾーン : Tokyo Standard Time
- Pleasanterのテナント設定 : 東京
- Pleasanterのユーザー設定 : 東京
Service.json は以下のように設定していました。
{
"TimeZoneDefault": "Tokyo Standard Time",
"DefaultLanguage": "ja"
}
Rds.json も Azure SQL Database 用に以下のような設定です。
{
"Dbms": "SQLServer",
"Provider": "Azure"
}
原因
今回の原因は、Pleasanterを動かすOSの時刻とデータベースの時刻が異なるために発生している問題でした。
Pleasanterはデータベースの時刻ロケールと、アプリケーションが動作しているOSの時刻ロケールが一致していることを前提とした設計になっているようです。
特にAzure SQL Database のように、データベース側の時刻を UTC から変更できない場合は、この前提が崩れてしまうことが原因になります。
解決方法
解決方法は、Windows Server のタイムゾーンを UTC に変更することでした。
管理者権限の PowerShell またはコマンドプロンプトで、以下を実行します。
tzutil /s "UTC"
この状態にすることで、DBとOSの基準時刻がUTCで揃い、Pleasanterの画面上ではユーザーのタイムゾーンに従って日本時間で表示されるようになりました。
注意点
Windows Server のタイムゾーンを UTC に変更すると、Pleasanter 以外にも影響があります。
特に以下は確認しておいたほうがよいです。
- 同じサーバー上の別アプリケーション
- タスクスケジューラ
- ログの表示時刻
- バックアップ処理
- バッチ処理
- ファイル更新日時の見え方
Pleasanter 専用サーバーであれば影響は比較的限定的ですが、他システムと共存している場合は注意が必要です。
まとめ
最初は Pleasanter の Service.json やテナント・ユーザーのタイムゾーン設定を疑いましたが、最終的には OSのタイムゾーンをUTCに揃える のが正解でした。
同じ構成で更新日時がずれる方の参考になれば幸いです。