問題
- 以下のようにしてデフォルトのタイムゾーンを変更した:
1. インスタンスの設定 > ローカライゼーション > タイムゾーン > 東部夏時間への変更
2. ユーザーアカウント設定 > 環境設定 > 表示設定 > 東部夏時間への変更
- プログラムによってデータベースからエントリーを取得する場合、手動で時間を変換する必要があるのか、それとも自動的に変換されるのか。
環境
- 2023.Q4.8
解像度
- データベースは常にGMTとして保存され、適切なタイムゾーンで表示するかどうかは開発者次第である。 そのため、それを処理するには、変換を提供する必要がありますが、Liferayにはこれを支援する機能があります。 例えば、ウェブコンテンツの場合、記事の表示日を表示するには、次のようなコードを使うことができる:
<%
Format dateFormat = FastDateFormatFactoryUtil.getDateTime(themeDisplay.getLocale(), themeDisplay.getTimeZone());
%>
<p>Display Date: <%= dateFormat.format(article.getDisplayDate()) %></p>
-
このコードでは、FastDateFormatFactoryUtil を使用して、ユーザーのロケールとユーザーのタイムゾーンを設定した format のインスタンスを取得します。 GMTで表示される実際の日付をフォーマットする場合、フォーマッターはユーザーのローカルタイムゾーンに変換し、期待される方法で表示します。
- ポータルはこの種のロジックを活用している 。 ThemeDisplayはリクエストごとに適切なロケールとタイムゾーンが設定され、ユーザーのタイムゾーンに設定されます(タイムゾーンが設定されている場合)。 FastDateFormatFactoryUtil には、フォーマット面を制御する引数を取る多くの異なる getDateTime() メソッドがあります (短い日付と長い日付など)。