ADVERTISEMENT

【Power Automate】日本時間への変換で困った時の入力値と条件分岐の直し方

【Power Automate】日本時間への変換で困った時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateで日時データを扱うとき、UTC(協定世界時)から日本時間(JST)への変換に失敗して思った通りの値にならないトラブルはよく発生します。特にフローの中で時間を条件分岐に使おうとしたときに、変換後の値が想定とずれてしまうケースが多いです。この記事では、正しい入力値の指定方法やタイムゾーン変換アクションの設定手順、条件分岐での比較テクニックを具体的に解説します。これを読めば、日本時間への変換で迷うことなくフローを完成させられるでしょう。

【要点】この記事で確認すること

  • 最初に見る場所: 「Convert time zone」アクションの設定内容(変換元・変換先タイムゾーン、入力値の形式)
  • 切り分けの軸: 入力値が日付型か文字列か、タイムゾーン名が正しいか、条件式の演算子が適切か
  • 注意点: 動的コンテンツの値が空白やnullになる場合の対策、フローのテスト環境と本番環境でのタイムゾーン差異

ADVERTISEMENT

なぜ日本時間に変換してもずれるのか?よくある原因

Power Automateが内部的に扱う日時は基本的にUTCです。そのため、どこかでタイムゾーン変換を明示的に行わない限り、日本時間から数時間ずれた値が表示されます。しかし、変換アクションを正しく入れているのに結果がおかしい場合、次の3つの原因が考えられます。

原因1: 入力値のデータ型が正しくない

「Convert time zone」アクションは、入力値に日付型(Date/Time)または適切な形式の文字列を期待します。たとえばSharePointの「作成日時」列は日付型として取得できますが、Excelのセルから読み込んだ値が文字列として扱われると変換に失敗します。動的コンテンツのデータ型を確認し、必要に応じて「utcNow()」などの関数で明示的に日付に変換してください。

原因2: タイムゾーン名の指定ミス

「Convert time zone」アクションでは、変換元と変換先のタイムゾーンを指定する必要があります。日本時間を変換先にする場合、タイムゾーン名は「Tokyo Standard Time」もしくは「Asia/Tokyo」です。よくある間違いとして「Japan Standard Time」と指定してしまうケースがありますが、これは正しく認識されないため注意してください。また、変換元のタイムゾーンを誤って「UTC」ではなく「協定世界時」などにしていないか確認しましょう。

原因3: 条件分岐で比較する値の単位が異なる

時間を条件分岐に使うとき、変換後の日本時間を例えば「9:00」のような時刻だけの文字列に整形して比較するケースがあります。しかし、元の値が日付+時刻の形式である場合、単純な「等しい」比較では一致しません。「日付部分を無視して時刻だけ比較する」には、formatDateTime関数などで時刻部分を抽出する必要があります。この点を見落とすと、いつまでたっても条件が成立しないトラブルが発生します。

変換の基本:Convert time zoneアクションの正しい設定手順

ここでは、Power AutomateクラウドフローでUTCの日時を日本時間に変換する基本的な手順を説明します。以下の手順に沿って設定を行えば、迷わずに変換できます。

  1. フローエディターでアクションとして「Convert time zone」を検索して追加します。
  2. 「Base time」フィールドに、変換したい日時の値を指定します。多くの場合は動的コンテンツから該当する日時項目(例: 「作成日時」)を選択します。
  3. 「Source time zone」で、入力値の現在のタイムゾーンを選びます。UTCの場合は「UTC」を選択します。もしよく分からないなら、多くのMicrosoftサービスはUTCで保存されるため「UTC」を選択して問題ありません。
  4. 「Destination time zone」に「Tokyo Standard Time」を選択します。プルダウンで検索するときは「Tokyo」と入力すると候補が絞れます。
  5. 「Format string」には、出力させたい日時の形式を指定できます。例: 「yyyy-MM-dd HH:mm:ss」 や 「HH:mm」 。時刻だけ必要な場合は「HH:mm」としてください。何も指定しないと標準のISO8601形式で出力されます。

この手順で出力された値は、日本時間に変換されています。しかし、後続のアクションで条件分岐に使う場合、出力された値の形式と比較対象の形式を揃える必要があります。次のセクションで詳しく説明します。

条件分岐で時間を比較する際の注意点

フローの中で、「もし現在時刻が9時以降なら処理A、それ以外なら処理B」という条件分岐を実装するケースは多いです。ここでは、日本時間に変換した値を使って正しく分岐するためのポイントを解説します。

動的コンテンツと固定値の比較

条件式で「変換後の日本時間が’09:00’と等しい」と設定しても、変換後の値が「2025-02-18 09:00:00」のように日付を含む形式だと一致しません。比較する前にformatDateTime関数を使用して、日付部分を除去して時刻だけに整形します。式の例: formatDateTime(outputs('Convert_time_zone'), 'HH:mm') 。この結果を条件の左辺にセットし、右辺は「09:00」のような時刻文字列にします。

時刻の範囲比較(以上・以下)

「9時00分以降である」という条件を作る場合、「is greater than or equal to」演算子を使います。ただし、時刻文字列同士の比較は辞書順になるため、「08:59」は「09:00」より小さいと正しく判定されます。日付を含む値同士を比較する場合は、両方とも日付+時刻の文字列に統一し、演算子の「after」や「before」の代わりに「greater」や「less」を使います。タイムゾーンが揃っていれば問題なく動作します。

比較パターン 推奨方法 注意点
時刻だけの一致(例: 9:00ちょうど) 両方をformatDateTimeで「HH:mm」に整形し「等しい」で比較 秒まで含まれると一致しないため、秒を切り捨てる
時刻の範囲(例: 9:00以降) 変換後の日時文字列をそのまま使い「is greater than or equal to」 タイムゾーンがUTC基準だとずれるので、日本時間に変換後に比較
特定の日時(例: 2025-02-18 10:00) 文字列で「yyyy-MM-ddTHH:mm:ss」形式で固定値を書き、日本時間に変換した値と比較 固定値も日本時間で指定し、それ自体はタイムゾーン変換しない

失敗パターン:こんなときどうする?

実際の運用でよく発生する失敗例を3つ挙げ、それぞれの解決方法を示します。

パターン1: SharePointの「作成日時」を変換したら9時間ずれている

原因は、SharePointの日時列が「協定世界時(UTC)」で保存されているのに、変換元タイムゾーンを「UTC」に設定していないケースです。デフォルトでは「未指定」になっている可能性があります。必ずソースタイムゾーンをUTCに明示してください。また、変換先に「Tokyo Standard Time」が正しく選択されているか確認します。

パターン2: 「Convert time zone」アクションがエラーになる

入力値がnullや空白の場合、アクションが失敗します。フローがトリガーされたときにその日時を使う前に、条件分岐で値が空でないことを確認しましょう。また、動的コンテンツが日付型以外(例: 文字列の数字)の場合もエラーになります。その場合は、先に「toDate」や「parseDateTime」で変換してください。

パターン3: 条件分岐の結果が常にFalseになる

前述のように、変換後の値が「2025-02-18T09:00:00.000Z」のような形式で、比較対象の「09:00」と文字列比較できないケースです。対策として、formatDateTimeで両辺の形式を揃えます。また、演算子の「is equal to」の代わりに「contains」や「starts with」を使う方法もありますが、厳密な時刻比較には適しません。

管理者が確認すべき設定と社内ルール

組織全体でフローを管理する場合、タイムゾーン関連のトラブルを減らすために以下の点を確認しておくと良いでしょう。

  • Power Automate環境の既定のタイムゾーン設定(地域設定)を確認し、必要なら日本時間に統一する。
  • SharePointのサイトコレクションのタイムゾーン設定も影響するため、日本時間に合わせる。
  • 条件分岐でよく使う時刻の基準(例: 営業開始時刻)をあらかじめ変数として定義し、各フローで統一するルールを作る。
  • フロー共有時に入力値のデータ型を明記したドキュメントを用意し、他のメンバーが間違えないようにする。

これらの運用ルールを徹底することで、Power Automateのトラブル発生率を大幅に下げられます。

よくある質問(FAQ)

Q1: タイムゾーン名「Tokyo Standard Time」が見つかりません。

プルダウンの検索で「Tokyo」と入力しても表示されない場合、List of Time Zonesアクションを使ってサポートされるタイムゾーンの一覧を取得してください。また、Power Automateのリージョン設定が原因で特定のタイムゾーンが表示されない可能性もあります。その場合は「Asia/Tokyo」の別名があるか確認します。

Q2: utcNow()関数で取得した時刻を日本時間に変換すると1時間ずれます。

utcNow()はUTC時刻を返します。変換元タイムゾーンを「UTC」、変換先を「Tokyo Standard Time」に設定すれば、日本時間(UTC+9)に正しく変換されます。もし1時間ずれるなら、夏時間(サマータイム)が関係している可能性があります。日本はサマータイムを採用していないため、DSTの考慮は不要です。

Q3: 条件分岐で「日付が今日かどうか」を判定したいです。

まず対象の日時を日本時間に変換し、formatDateTimeで「yyyy-MM-dd」に整形します。同様にutcNow()から日本時間の日付部分を取得し、文字列比較します。例: formatDateTime(utcNow(), 'yyyy-MM-dd') 。ただし、utcNow()は毎回異なる値を返すため、フロー内で2回使うと結果が変わることがあります。先頭で変数に格納することをおすすめします。

まとめ

Power Automateで日本時間への変換を確実に行うには、変換元のタイムゾーンをUTCに、変換先をTokyo Standard Timeに設定し、入力値が日付型であることを確認する必要があります。条件分岐ではformatDateTimeを使って比較する値の形式を統一し、場合によっては時刻部分だけを抽出して比較することで、誤判定を防げます。また、組織のフロー管理ルールを整備することで、同じトラブルを繰り返さない環境を作ることが重要です。この記事を参考に、日時変換のストレスから解放されてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT