日時型 Architectフローと夏時間(DST)計算の値


Architectは、世界協定時刻(UTC)をネイティブで処理します。 日時型 値UTCの変換に関して 日時型 地元に 日時型 Architectには現在、オフセットと夏時間(DST)バイアスを提供するために使用できるタイムゾーンデータ型が含まれていないため、特定のタイムゾーンに対してフロー作成者はこの変換を実行するためにフロー内にロジックを構築する必要があります。

たとえば、 Flow.StartDateTimeUtc 日時型 変数と GetCurrentDateTimeUtc() 関数リターン 日時型 UTCの値Architectは、フロー作成者が操作するのに役立つさまざまな式関数と演算子を提供します 日時型 フロー作成者のニーズに合わせた値フロー作成者からのよくある質問は、 日時型 UTCを反映するように値 日時型 というのは、現地時間に基づいてフロー実行を変更したいからです。この問題は、コールフローで、現地時間の午前9時から午後5時の間にキューにコールをルーティングするだけの場合に発生することがあります。

にオフセットを適用するために一般的に使用される関数 日時型 そして結果を返す 日時型 値は次のとおりです。

  • AddHours
  • AddMinutes

一部の演算子を使用して、 日時型 値。たとえば、+を使用してDurationにDurationを追加 日時型 そして結果を得る 日時型 同様に。

次の例では、局所的な 日時型 UTCからの値 日時型 組織に最適なものに応じて変更できます。


この基本的なアプローチでは、フロー作成者はオフセットをフローレベル変数に格納し、それをUTCに適用できます。 日時型 流量計算に使用される値。次の例では、オフセットは次の場所に格納されています。 Flow.HourOffset

Flow.LocalDateTime = AddHours(GetCurrentDateTimeUtc(), Flow.HourOffset)

タイムゾーンが前に進む、または後退する場合は、値を Flow.HourOffset そしてフローを再発行します。この単純なロジックは、組織にとっては十分かもしれません。いくつかのタイムゾーン。たとえば、アリゾナとハワイは、前に飛び出したり後退したりしないので、ハードコーディングされたオフセットで十分です。

また、時間帯によっては、1時間ではなく30分後に早送りまたは遅れることがあります。そのような場合は、AddHoursではなくAddMinutesを使用して適切なオフセットを適用してください。 DSTを扱う現地時間がある場合は、その時間が早まったり早まったりするときに、オフセットに使用される変数に格納されている値を適宜変更します。上記の例では、Flow.HourOffsetの値を変更して、時間が前に進むか後退するときにフローを再発行することを意味します。


前の例のように、タイムゾーンが前進または後退するたびにフローを再公開するというタスクを回避するために、コレクション変数を使用してタイムゾーンのオフセットを考慮できます。この方法では最初より多くの作業が必要になりますが、フローレベルの変数に格納されているオフセットを管理する必要がなくなり、式を使用するよりも簡単になります。

この方法は、並列配列アプローチを使用し、UTCが与えられたときのタイムゾーンのバイアスオフセットを考慮した望ましいオフセットを保存します 日時型 値。この例は、東部タイムゾーンの整数コレクション変数の設定です。 日時型 値の計算 

注意:オフセットは-5時間です。必要に応じて、Flow.LocalTimeZoneMinuteOffsetCollection項目のエントリに夏時間バイアスを手動で適用します。
コレクションアイテム Flow.UtcDateTimeCollection Flow.LocalTimezoneMinuteOffsetCollection
アイテム0 日曜日, 3月 13, 2016 で 07:00 午前

-300 

注意:-300は-300分または-5時間を表します。

項目1 日曜日, 11月 6, 2016 で 08:00 午前

-240

注意:-240は-240分または-4時間を表します。この場合、 日曜日, 3月 13, 2016 UTC(コレクションの最初の項目)の午前7 :00まで 日曜日, 11月 6, 2016 UTCの午前8 :00に、システムはUTCを相殺する必要があります。 日時型 これは正しい現地時間であることを保証します。

項目2 日曜日, 3月 12, 2017 で 07:00 午前 -300
項目3 日曜日, 11月 5, 2017 で 08:00 午前 -240
項目4 日曜日, 3月 11, 2018 で 07:00 午前 -300
項目5 日曜日, 11月 4, 2018 で 08:00 午前 -240
項目6 日曜日, 3月 10, 2019 で 07:00 午前 -300
項目7 日曜日, 11月 3, 2019 で 08:00 午前 -240
項目8 日曜日, 3月 8, 2020 で 07:00 午前 -300
項目9* 日曜日, 11月 1, 2020 で 08:00 午前 -240

* 2020年を過ぎるコールフローのエントリをさらに追加します。

このコレクションはUTCのセットです 日時型 東部タイムゾーンが前進または後退する時の値では、フローが開始されたときに、DSTとタイムゾーンの考慮事項に基づいて現地時間を探すタスクを作成します。

  1. UTCを決定する 日時型 フロー作成者がローカルを取得したい値 日時型。たとえば、Update DataアクションまたはFlow.StartDateTimeUtcを使用してGetCurrentDateTimeUtc()をFlow.UtcDateTimeToCheckに保存するか、この場合は Flow.StartDateTimeUtc
  2. ループアクションを追加して設定します。
    1. インデックス0から始めて、 Flow.UTCDateTimeCollection
    2. で見つかった最初の値 Flow.UTCDateTimeCollection 以上 Flow.UtcDateTimeToCheck同じアイテムインデックスからの対応する分オフセットを Flow.LocalTimezoneMinuteOffsetCollectionFlow.MinuteOffsetToApply
  3. ループ後、値が割り当てられていない場合 Flow.MinuteOffsetToApplyデフォルトの分オフセットを割り当てます。例えば300です。この状況では、UTC 日時型 時間をチェックするための値に、それ以上のエントリがありません。 Flow.UtcDateTimeCollection 変数。
  4. 次に、次の式を使用して上記のアルゴリズムから現地時間を取得します。
    Flow.MyLocalDateTimeToUse = AddMinutes(Flow.UtcDateTimeToCheck, Flow.MinuteOffsetToApply)

これで、計算に使用できる適切なバイアスが適用された現地時間が得られました。適用されるバイアスは、 Flow.LocalTimezoneMinuteOffset コレクション。


表現方法はより複雑ですが、この方法ではハードコーディングは必要ありません。 日時型 対応するオフセット整数コレクションとともにコレクションに値を設定します。ただし、特定の時間帯に適応する場合、特に前に飛び出すか後退するとUTCに日が変わる場合は、式が複雑になることがあります。 日時型 計算

この例では、タイムゾーンは3月の第2日曜日の午前7 :00 UTCに進み、11月の第1日曜日の午前8 :00にフォールバックします(年に関係なく)。東部標準時を使用すると、これはDSTの間、UTCオフセットが-4時間(または-240分)であり、DSTにない場合、UTCオフセットは-5時間(または-300分)です。式の結果は「ローカル」です。 日時型 適切なオフセットがUTCに追加された状態で 日時型 -4または-5時間を計算する 日時型 値:

  1. 追加する データ更新 アクション。
  2. データの更新アクションで、 日時型 ステートメントを更新します。
  3. 変数名追加する Flow.LocalDateTime
  4. 割り当てる値、大きな式エディタに切り替えて式を追加します。
AddMinutes(Flow.StartDateTimeUtc,
      (If(Flow.StartDateTimeUtc >= GetDayOfWeekOccurrence(1,2,Year(Flow.StartDateTimeUtc),3,7,0,0)
               and Flow.StartDateTimeUtc <= GetDayOfWeekOccurrence(1,1,Year(Flow.StartDateTimeUtc),11,8,0,0),
               -240,
               -300)
   )
)

この式のロジックは、3月の第2日曜日の午前7時と午前8時の午前8時に、現在DSTにいるかどうかを決定します。

論理に送信された最初のパラメータ もし 上記の式では与えられたUTCかどうかを判断する機能を提供します。 日時型 EasternタイムゾーンのDSTウィンドウに表示されます。これを使用して、オフセットを 日時型 240分(-4時間)または-300分(-5時間)のいずれかになります。式の残りの部分は適用する値を提供します。DSTがオンの場合はtrue、そうでない場合はfalseと評価されるブール式が必要な場合は、ブール値を返すので、このロジックを別の式に抽出します。

(
      (Month(Flow.UtcDateTime) > 3)
        or
      (Month(Flow.UtcDateTime) == 3 and Month(AddDays(Flow.UtcDateTime, -7)) == 3 and Month(AddDays(Flow.UtcDateTime, -14)) == 3)
        or
      (
        (Month(Flow.UtcDateTime) == 3 and Month(AddDays(Flow.UtcDateTime, -7)) == 3 and Month(AddDays(Flow.UtcDateTime, -14)) == 2)
          and
        (DayOfWeek(Flow.UtcDateTime) > 1 or (Hour(Flow.UtcDateTime) >= 7))
      )
    )
    and
    (
      (Month(Flow.UtcDateTime) < 11)
        or
      (
        (Month(Flow.UtcDateTime) == 11 and Month(AddDays(Flow.UtcDateTime, -7)) == 10)
          and
        (
          (DayOfWeek(Flow.UtcDateTime) == 1 and Hour(Flow.UtcDateTime) < 8)
            or
          DayOfWeek(Flow.UtcDateTime)!=1
        )
      )
    )
        

注意:すべてのフロータイプで スケジュールを評価する そして スケジュールグループを評価する 行動。スケジュールグループを使用すると、フロー作成者は、UTCオフセット、DSTのスプリングフォワードおよびフォールバックの動作などを処理するための簡単な代替手段として、計算を作成する柔軟性を提供します。