GlideDateTime コンストラクターでは gs.nowDateTime() または GlideDateTime.getDisplayValue() を使用しないIssue GlideDateTime コンストラクターでは gs.nowDateTime() や GlideDateTime.getDisplayValue() を使用しないでください。 GlideDateTime コンストラクターには、いくつかのオプションがあります。 引数なし:現在の日付/時刻に初期化します。GlideDateTime オブジェクト:引数と同じ日付/時刻に初期化します。文字列:YYYY-MM-DD HH:MI:SS 形式であり、UTC の日付/時刻として扱われます。 UTC 以外の文字列値を渡すと、時間がずれ、予期しない動作の原因となります。 Cause現在の日付と時刻で GlideDateTime オブジェクトを作成するには、パラメーターを指定しないようにします。GlideDateTime クラスのコンストラクターを呼び出すだけで、値は現在の日付と時刻に初期化されます。 //次のようにします。var dgt = new GlideDateTime(); GlideDateTime オブジェクトを設定するために gs.nowDateTime() を使用しないでください。nowDateTime() メソッドは、ローカルタイムゾーンの日付と時刻をローカル形式で返します。GlideDateTime オブジェクトは、UTC タイムゾーンの日付と時刻を内部形式で使用します。 //次のようにしないでください。var gdt = new GlideDateTime(gs.nowDateTime()); 同様に、表示用の日付/時刻の値を UTC とするべき場所で使用することにより、コードが以下のことを有効に行っているとします。 var gdt = new GlideDateTime();var gdt2 = new GlideDateTime(gdt.getDisplayValue()); この場合、2 つ目の GlideDateTime オブジェクトの内部値は、セッションのタイムゾーンと UTC の間の TZ オフセットに相当する量だけシフトすることになります。 完全な例を次に示します。 var gdt = new GlideDateTime();gs.info('1. UTC: ' + gdt.getValue());gs.info('2. Local/Dispay: ' + gdt.getDisplayValue()); // Local TZ for this example is America/Los_Angelesgs.info(' ');gs.info('3. nowDateTime: ' + gs.nowDateTime());gs.info(' ');var gdt2 = new GlideDateTime(gs.nowDateTime()); // BAD!gs.info('4. UTC: ' + gdt2);gs.info('5. Local/Display: ' + gdt2.getDisplayValue()); 出力は以下のようになります。 *** Script: 1. UTC: 2022-01-18 16:48:13*** Script: 2. Local/Display: 2022-01-18 08:48:13*** Script: *** Script: 3. nowDateTime: 2022-01-18 08:48:13*** Script: *** Script: 4. UTC: 2022-01-18 08:48:13*** Script: 5. Local/Display: 2022-01-18 00:48:13 上記の出力では、最初の GlideDateTime オブジェクトは、コンストラクターに値が渡されなかったため、現在の日付/時刻に初期化され、(2) と (3) はどちらも glide.sys.date_format と glide.sys.time_format に従って書式設定されたローカルの日付/時刻を表示し、(1) は GlideDateTime 内部の UTC 値を示しています。 2 つ目の GlideDateTime オブジェクトにはローカルの日付/時刻値が渡されました。この値は、インスタンスがデフォルトのタイムゾーンとして米国/ロサンゼルスを使用しており、スクリプトが実行されたセッションでは変更されていないため、既に UTC から -8 時間オフセットされています。 GlideDateTime(string) コンストラクターは UTC の日付/時刻値のみを要求するため、米国/ロサンゼルスの日付/時刻値は内部値 (4) と表示値 (5) の両方で -8 時間シフトします。 非標準の日付/時刻形式を使用している場合は、さらに問題が発生する可能性があります。 GlideDateTime(string) コンストラクターは、yyyy-MM-dd HH:mm:ss 形式を使用して文字列を有効な日付/時刻に変換できない場合、いくつかの「緊急」形式を試します。これらの形式のいずれかで文字列引数を正常に解析できても、設定した日付/時刻が想定したものでない可能性があります。 [デバッグ日時] を有効にすると、このようなことが発生しているかどうかが表示されます。また、インスタンスが dd/MM/yyyyy のような日付形式を使用するように構成されているところに、MM/dd/yyyy 形式の日付が指定されるのも、よくある問題です。 例えば、dd/MM/yyyy 形式を使用した 03/12/2021 は 2021 年 12 月 3 日ですが、MM/dd/yyyy 形式が最初に一致すると、日付は 2021 年 3 月 12 日となります。 注:gs.nowDateTime() メソッドはスコープ対象のアプリケーションでは使用できません。 ResolutionUTC が想定されるコンテキストに対して、表示用の日付/時刻値が使用されていないことを確認してください。 これは、コード全体で一貫して getValue()/setValue() および getDisplayValue()/setDisplayValue() メソッドを使用することで、コードをより明確にすることができます。