PowerAutomateに日時型なんてものはない


Power Automateでフローを構築するとき、「現在日時」を取得して利用したり、「ExcelのテーブルのXX列から読み取った日付」を読み取って利用したりと、日時データを扱うことはしばしばあります。

Problem

ところで、Power Automateで扱えるデータ型には「日時型」(例:C#のDateTime、JavaのDateやDateTime、JavaScriptのDate)は存在しないようです。これは「問題」というより単なる「事実」かもしれませんが。。。

Solution

では日付データはどのように扱うかというと文字列型(String型)のデータとして扱います。ISO8601で規定されたフォーマットや、その他のフォーマットで日時データが表現されている、単なる文字列です。

例:現在の日時を得るには utcNow() 関数を使いましょう。ただし関数名が示す通りこの関数が返すのは世界標準時です。ISO8601形式でミリ秒精度、タイムゾーン付きの日時文字列が得られます。

utcNow()

例:その値を日本標準時に変換するには convertFromUtc() 関数を使いましょう。

convertFromUtc(utcNow(), 'Tokyo Standard Time')

例:30分後の時刻を知りたい場合は addMinute() 関数を使いましょう。ちなみに30分前の場合は負数を指定します。

addMinute(convertFromUtc(utcNow(), 'Tokyo Standard Time'), 30)

だいたいいつもこんな調子ですが、注意点が2つあります。

  1. アクションによって日時データの解釈の仕方が違うので注意しましょう。 所定の欄に入力された日時データ(を表す文字列)を世界標準時として解釈するものと、どこかしらの国・地域の標準時として解釈するものとがあります。
  2. 日時データの書式化(フォーマット)はなるべく最後の段階で行いましょう。 繰り返しになりますが、Power Automateにおいて日時データは単なる特別な書式を持つ文字列データです。ひとたび、Power Automateが標準で使用するフォーマット(ISO8601)以外に変換したら、後続の処理でもその書式を意識した処理をしなくてはなりません。前掲の「例」で convertFromUtc()addMinute() はいずれも第3引数を省略していますが、これができるのはISO8601を使う場合だけです。