intra-mart Accel Platform タイムゾーン仕様書 初版 2024-06-28

4. 仕様

本章では、intra-mart Accel Platform のタイムゾーンや夏時間、日付と時刻の形式に関する動作仕様や考え方を説明します。

4.1. 基本的な動作仕様

intra-mart Accel Platform は、「アプリケーションの日付や時刻に関わる対応について」の記載内容を満たすように動作します。
つまり、ユーザごとにタイムゾーンや日付と時刻の形式を設定可能で、ユーザにとって適切なタイムゾーンや形式で日付や日時の入力・表示が可能です。

4.1.1. 3種類のタイムゾーンを設定可能

intra-mart Accel Platform では、アカウントタイムゾーン、テナントタイムゾーン、システムタイムゾーンという3種類のタイムゾーンを設定できます。
名前 説明
アカウントタイムゾーン
ユーザごとに設定できるタイムゾーンです。
ログインした後の日時情報の画面表示や入力、アカウントの有効期間のような期間情報との比較等、様々な機能で利用されます。
「サイトマップ」→「個人設定」→「ロケール」をクリックすることで表示される画面から設定可能です。
詳しくは「一般ユーザ操作ガイド」-「ロケールを設定する」を参照してください。
テナントタイムゾーン
テナントごとに設定できるタイムゾーンです。
アカウントタイムゾーンのデフォルト値として利用されます。
また、アナウンス機能等の一部の機能で利用されます。
「サイトマップ」→「テナント管理」→「テナント情報」→「タイムゾーン」をクリックすることで表示される画面から設定可能です。
詳しくは「テナント管理者操作ガイド」-「タイムゾーンを設定する」を参照してください。
システムタイムゾーン
システムで一意なタイムゾーンです。
日時データのデータベース登録や、ログ出力等で利用されます。
システムタイムゾーンは、Java の起動引数として指定できます。
指定しなかった場合は、OS の設定等に依存してシステムタイムゾーンが決定されます。
例えば、システムタイムゾーンを UTC に変更する場合は、Resin であれば resin.propertiesjvm_args-Duser.timezone=UTC を追加することで変更できます。

コラム

テナントについて

intra-mart Accel Platform では、複数の独立した企業が単一の intra-mart Accel Platform システムを共同利用する場合、テナントと呼ばれる単位でシステムを分割できます。
テナント分割により、データベースやストレージといったデータの永続領域をテナントごとに設定できるため、新たなシステムを構築することなく、各企業のデータを完全に分離することが可能です。
../../_images/three_types_of_time_zones1.png

ユーザは利用したいタイムゾーンをアカウントタイムゾーンとして設定できます。
ログインユーザのタイムゾーンとして、アカウントタイムゾーンが利用されます。
もし、アカウントタイムゾーンが設定されていない場合は、テナントタイムゾーンがログインユーザのタイムゾーンとして利用されます。

4.1.2. ユーザのタイムゾーンに基づいて画面を表示

intra-mart Accel Platform では、画面上の日付や日時は、基本的にログインユーザのタイムゾーンに基づいて表示されます。
例えば、ログインユーザのタイムゾーンがニューヨーク(America/New_York)であった場合に、「ジョブネットモニタ一覧」に表示されるジョブネットの開始日と終了日は、ニューヨーク(America/New_York)の日時が表示されます。
../../_images/display_on_the_screen1.png
ログインユーザのタイムゾーンが東京(Asia/Tokyo)であった場合には、東京(Asia/Tokyo)の日時が表示されます。
../../_images/display_on_the_screen2.png

4.1.2.1. 夏時間

intra-mart Accel Platform では、夏時間期間中の日時は、調整して表示されます。
例えば、ログインユーザのタイムゾーンがニューヨーク(America/New_York)であった場合に、夏時間期間中の日時を表示すると、UTC-4 の日時が表示されます。
同じ条件で夏時間期間外の日時を表示すると、UTC-5 の日時が表示されます。
../../_images/display_on_the_screen3.png

4.1.3. ユーザのタイムゾーンに基づいた画面からの入力

intra-mart Accel Platform では、ユーザにより画面から入力された日付や日時は、基本的にログインユーザのタイムゾーンに基づいた日付や日時として扱います。
例えば、ログインユーザのタイムゾーンがニューヨーク(America/New_York)であった場合に、「スケジュール登録」から期間を入力したとします。
この場合、入力された期間の開始日時や終了日時は、ニューヨーク(America/New_York)の日時として扱われます。
../../_images/input_from_the_screen1.png
ログインユーザのタイムゾーンが東京(Asia/Tokyo)だった場合には、入力値は東京(Asia/Tokyo)の日時として扱われます。
../../_images/input_from_the_screen2.png

4.1.3.1. タイムゾーンが指定可能な場合

intra-mart Accel Platform では、画面上で日時と一緒にタイムゾーンが指定可能な場合は、指定されたタイムゾーンに基づいた日時として扱われます。
例えば、ログインユーザのタイムゾーンが東京(Asia/Tokyo)であった場合に、画面上でタイムゾーンとしてロサンゼルス(America/Los_Angeles)と入力すると、入力した日時はロサンゼルス(America/Los_Angeles)の日時として扱われます。
../../_images/input_from_the_screen3.png

4.1.3.2. 夏時間

intra-mart Accel Platform では、夏時間の日時を入力できます。
例えば、ログインユーザのタイムゾーンがニューヨーク(America/New_York)であった場合に、夏時間期間中の日時を入力すると、UTC-4 の日時として処理されます。
これにより、東京(Asia/Tokyo)のユーザがその日時を表示した場合でも適切な日時が表示されます。
タイムゾーンが指定可能な場合も同様に、タイムゾーンをニューヨーク(America/New_York)と指定して夏時間期間中の日時を入力すると、UTC-4 の日時として処理されます。

4.1.4. ユーザごとに日付と時刻の形式を設定可能

intra-mart Accel Platform では、ユーザごとに日付と時刻の形式を設定できます。
具体的には、「サイトマップ」→「個人設定」→「日付と時刻の形式」をクリックすることで表示される画面から設定可能です。
../../_images/configurable_date_and_time_formats1.png
詳しくは、以下を参照ください。

また、テナントごとにユーザのデフォルトの形式を設定可能です。
詳しくは、以下を参照ください。

4.1.5. ユーザの日付と時刻の形式で表示

intra-mart Accel Platform では、画面上の日付や日時は、ログインユーザの日付と時刻の形式に則って表示されます。
例えば、ログインユーザの日付の表示形式が「MMM d, yyyy」で時刻の表示形式が「h:mm:ss a」あった場合に、「ジョブネットモニタ一覧」には以下のように表示されます。
../../_images/display_based_on_user_date_and_time_formats1.png

4.1.6. ユーザの日付と時刻の形式で入力

intra-mart Accel Platform では、画面から日付や日時を入力する場合に、ログインユーザの日付と時刻の形式に則って入力できます。
例えば、ログインユーザの日付の入力形式が「MM/dd/yyyy」で時刻の入力形式が「HH:mm」あった場合に、「スケジュール登録」から以下のように入力できます。
../../_images/input_based_on_user_date_and_time_formats1.png

4.1.7. 1日は24時間換算

intra-mart Accel Platform では、1日は 24時間換算します。
例えば、パスワード有効日数を 3日とした場合、ニューヨーク(America/New_York)のユーザが “2023-03-11T00:00:00-05:00” にパスワードを変更すると、夏時間の開始により “2023-03-12” は 23時間しかないため、パスワードは “2023-03-14T01:00:00-04:00” まで有効です。​
../../_images/converting_24_hours_in_a_day1.png

../../_images/converting_24_hours_in_a_day2.png

4.2. 動作仕様を実現するための考え方

intra-mart Accel Platform は、上述の動作仕様を実現するために、以下のような考え方に基づいて実装されています。
  • 日付や日時の変換は、統一された API によって行います。
    日付や日時の変換は、intra-mart Accel Platform が提供している API を使って行います。
    これにより、タイムゾーンや日付と時刻の形式に関するユーザごとの設定に応じた変換が行われます。
    統一された API を利用することで、ユーザが未設定の場合でも統一された動作を実現できます。
    また、統一されたマスタに基づいてタイムゾーンに関する変換や夏時間の調整が行われます。
    これにより、ミドルウェアの設定に起因した日付や日時に関する問題が発生しません。

  • 日付は相対的なデータとして扱います。
    日付は画面からの入力値をそのまま保存します。
    そして、保存された日付をそのまま画面に表示します。
    保存された日付は、タイムゾーンごとにデータの意味が異なるため、相対的なデータとして扱います。
    これにより、ユーザが日付を直感的に入力・確認できるようにします。

  • 日時は絶対的なデータとして扱います。
    日時は、画面からの入力値をシステムタイムゾーンに変換して保存します。
    そして、保存された日時を適切なタイムゾーンに変換して画面に表示したり、処理に利用したりします。
    これにより、ユーザが日時を直感的に入力・確認できるようにします。
    また、日時データのタイムゾーンがバラバラでは情報を活用することが難しいため、統一されたタイムゾーンで保存することで情報を有効に活用できるようにします。

以降では、「日付は相対的なデータとして扱います。」や「日時は絶対的なデータとして扱います。」という考え方について、もう少し詳しく説明します。

4.2.1. 日付は相対的

一般的に、東京(Asia/Tokyo)の “2000-01-01” という日付は、ニューヨーク(America/New_York)ではタイムゾーンが異なるので “1999-12-31” を意味している可能性があります。
具体的に東京(Asia/Tokyo)での “2000-01-01” という日付を日時として記載すると、“2000-01-01T00:00:00+09:00” から “2000-01-01T23:59:59+09:00” です。
これは、ニューヨーク(America/New_York)では “1999-12-31T10:00:00-05:00” から “2000-01-01T09:59:59-05:00” です。
../../_images/dates_are_relative1.png

東京(Asia/Tokyo) ニューヨーク(America/New_York)
日付
2000-01-01
1999-12-31 または 2000-01-01
日時
2000-01-01T00:00:00+09:00
/2000-01-01T23:59:59+09:00
1999-12-31T10:00:00-05:00
/2000-01-01T09:59:59-05:00

intra-mart Accel Platform では、東京(Asia/Tokyo)のユーザが日付を登録する場合、入力した日付がそのまま保存されます。
そして、ニューヨーク(America/New_York)のユーザで確認しても東京(Asia/Tokyo)のユーザで確認しても、入力した日付がそのまま表示されます。
../../_images/dates_are_relative2.png

これを日時で考えると、“2000-01-01” という日付が保存されていた場合に、東京(Asia/Tokyo)のユーザでは “2000-01-01T00:00:00+09:00” から “2000-01-01T23:59:59+09:00” を意味していて、ニューヨーク(America/New_York)のユーザでは “2000-01-01T00:00:00-05:00” から “2000-01-01T23:59:59-05:00” を意味しています。

東京(Asia/Tokyo) ニューヨーク(America/New_York)
日付
2000-01-01
2000-01-01
日時
2000-01-01T00:00:00+09:00
/2000-01-01T23:59:59+09:00
2000-01-01T00:00:00-05:00
/2000-01-01T23:59:59-05:00

intra-mart Accel Platform の日付データは、ユーザごとにデータの意味が異なるため相対的なデータと考えられます。

4.2.2. 日時は絶対的

東京とニューヨークではタイムゾーンが異なるため、“2000-01-01T00:00:00+09:00”“1999-12-31T10:00:00-05:00” と同じ日時を表しています。
../../_images/times_are_absolute1.png

東京(Asia/Tokyo) ニューヨーク(America/New_York)
日時
2000-01-01T00:00:00+09:00
1999-12-31T10:00:00-05:00

intra-mart Accel Platform では東京(Asia/Tokyo)のユーザが日時を登録した場合、システムタイムゾーンに変換された日時が保存されます。
そして、ニューヨーク(America/New_York)のユーザが保存された日時を確認すると、ニューヨーク(America/New_York)の日時が表示されます。
../../_images/times_are_absolute2.png

intra-mart Accel Platform の日時データは、どのタイムゾーンのユーザが確認しても同じ日時を意味するデータが確認できるため、日付とは異なり絶対的なデータと考えられます。

4.2.3. 日付と日時の比較

intra-mart Accel Platform における日付は、日時と比較する場合、ログインユーザのタイムゾーンに基づいた日付として扱われます。
例えば、アカウントの有効期限を “2000-01-01” からとした場合、東京(Asia/Tokyo)のユーザは “2000-01-01T00:00:00+09:00” から有効なアカウントとして扱われます。
../../_images/comparing_dates_and_times1.png

現在時刻が “2000-01-01T00:00:00+09:00” であれば、ニューヨーク(America/New_York)では “1999-12-31T10:00:00-05:00” です。
日付は相対的に扱われるため、ニューヨーク(America/New_York)のユーザは “2000-01-01T00:00:00-05:00” からアカウントが有効となるため、“1999-12-31T10:00:00-05:00” 時点では無効なアカウントとして扱われます。
../../_images/comparing_dates_and_times2.png