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 2016年3月13日日曜日午前7:00

-300 

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

項目1 2016年11月6日日曜日午前8時

-240

 メモ:   -240は、-240分または-4時間を表します。 この場合、2016年3月13日日曜日の午前7時以降 UTC(コレクションの最初のアイテム)2016年11月6日日曜日午前8時まで UTCの場合、システムはUTC DateTime値を-240分オフセットする必要があります。これにより、正しい現地時間になります。

項目2 2017年3月12日日曜日午前7:00 -300
項目3 2017年11月5日日曜日午前8時 -240
項目4 2018年3月11日日曜日午前7:00 -300
項目5 2018年11月4日日曜日午前8時 -240
項目6 2019年3月10日日曜日午前7:00 -300
項目7 2019年11月3日日曜日午前8時 -240
項目8 2020年3月8日日曜日午前7:00 -300
項目9* 2020年11月1日日曜日午前8時 -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時にフォールバックします。 東部標準時を使用すると、これはDSTの間、UTCオフセットが-4時間(または-240分)であり、DSTにない場合、UTCオフセットは-5時間(または-300分)です。 式の結果は「ローカル」です。 適切なオフセットがUTCに追加された状態で -4または-5時間 DateTime値を計算するには:

  1. 追加する データ更新 アクション。
  2. データの更新アクションで、 ステートメントを更新します。 
  3. 変数名追加する Flow.LocalDateTime
  4. 割り当てる値、大きな式エディタに切り替えて式を追加します。
AddMinutes(Flow.StartDateTimeUtc,
     (
          If(Flow.StartDateTimeUtc >= GetDayOfWeekOccurrence(1,2,Year(Flow.StartDateTimeUtc),3,1,0,0)
               and Flow.StartDateTimeUtc <= GetDayOfWeekOccurrence(1,1,Year(Flow.StartDateTimeUtc),11,1,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のスプリングフォワードおよびフォールバックの動作などを処理するための簡単な代替手段として、計算を作成する柔軟性を提供します。