概要
Power Automate Desktop(以下PAD) の変数についての記事3回目「Datetime型」です。PADのベース言語Robinのドキュメントを参考に試したものをまとめました。これまで「変数を設定する」アクション中心でしたがDatetime型に関しては日時に関するアクションを使用しています。後半は月末の求め方などのサンプルです。コードはPADにコピペで試せます。
目次
注意
- すでに使いこなしているかた向けの記事ではありません。
- RobinはPADのベースとなっていますが挙動が異なる部分があります。
- この記事の内容はすべて試していますが公式の見解とは異なる可能性がありますのでご注意ください。
- Power Automateクラウドフローの入出力変数については触れていません。
- 2021年2月の記事です。
- あくまでも個人のまとめです。
- 誤りがありましたらコメントでご指摘いただけると幸いです。
- Robinの公式サイトは2021年4月30日に終了しました。
datetime型を扱うアクションと変数について
datetime型変数はdatetime(日時データ)値を格納している変数です。
yyyy/MM/dd等に表記を変えたいときは「datetimeをテキストに変換」アクションを使います。
ただしテキスト値型になるため日時計算はできなくなります。
現在の時刻を取得します」アクション
変数名%CurrentDateTime%が作成され、システムの現在日時が格納されます。
%CurrentDateTime%は以下のプロパティ値を持ちます。
「変数を設定する」アクションで%CurrentDateTime%がもつ各プロパティ値を出力
曜日はテキスト値
Year,Month,day,Hour,Minute,Secondは数値
「変数を設定する」アクションから任意の日時を設定
時間は省略して記入できますが、一度保存すると自動的に00:00:00が付与されます
「日付の減算」アクション
2つの日時の差を求めることができます
「加算する日時」アクション
「datetimeをテキストに変更」アクション
datetime値の書式を変更します。
生成された変数の値はテキスト値です。
Datetime型の応用編
当月月初を求める1
現在日時からCurrentDateTime.dayを引くと0日になり先月末になります。
あとは+1日すれば月初になります。
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
DateTime.Add DateTime: CurrentDateTime TimeToAdd: -CurrentDateTime.Day + 1 TimeUnit: DateTime.TimeUnit.Days ResultedDate=> ResultedDate
当月月末を求める1
月初を求めたところからひと月進めて1日引く処理です。
前月末から+1月で良さそうなのですが、単純にMonthに+1されるだけなので例えば3月の場合、3月28日となってしまうためです。
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
DateTime.Add DateTime: CurrentDateTime TimeToAdd: -CurrentDateTime.Day + 1 TimeUnit: DateTime.TimeUnit.Days ResultedDate=> ResultedDate
DateTime.Add DateTime: ResultedDate TimeToAdd: 1 TimeUnit: DateTime.TimeUnit.Months ResultedDate=> ResultedDate2
DateTime.Add DateTime: ResultedDate2 TimeToAdd: -1 TimeUnit: DateTime.TimeUnit.Days ResultedDate=> ResultedDate3
当月月初を求める2
現在日時のプロパティ値からYearとMonthを使い01日を結合したテキスト値を作成。
それをdatetime値にもどします。
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SET date TO $'''%CurrentDateTime.Year%/%CurrentDateTime.Month%/01'''
Text.ConvertTextToDateTime.ToDateTime Text: date DateTime=> TextAsDateTime
当月月末を求める2
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SET date TO $'''%CurrentDateTime.Year%/%CurrentDateTime.Month%/01'''
Text.ConvertTextToDateTime.ToDateTime Text: date DateTime=> TextAsDateTime
DateTime.Add DateTime: TextAsDateTime TimeToAdd: 1 TimeUnit: DateTime.TimeUnit.Months ResultedDate=> ResultedDate
DateTime.Add DateTime: ResultedDate TimeToAdd: -1 TimeUnit: DateTime.TimeUnit.Seconds ResultedDate=> ResultedDate2
どちらのパターンも「datetimeをテキストに変更」アクションを適用して、日付だけの形式にするなら結果は同じですが、時刻も含めて考慮するケースでは1つめのパターンは注意が必要です。
数値型の日付をdaitetime値に変更する
「20210101」 のような数値型の日付をDatetime型の日時に変換します。
テキストのスライスを使った方法です。
SET NumDate TO 20210214
Text.FromNumber Number: NumDate DecimalPlaces: 0 UseThousandsSeparator: False FormattedNumber=> NumDateText
Text.ConvertTextToDateTime.ToDateTime Text: $'''%NumDateText[:4]%/%NumDateText[4:6]%/%NumDateText[6:]%''' DateTime=> TextAsDateTime
週末を考慮した月末稼働日
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SET date TO $'''%CurrentDateTime.Year%/%CurrentDateTime.Month%/01'''
Text.ConvertTextToDateTime.ToDateTime Text: date DateTime=> TextAsDateTime
DateTime.Add DateTime: TextAsDateTime TimeToAdd: 1 TimeUnit: DateTime.TimeUnit.Months ResultedDate=> ResultedDate
DateTime.Add DateTime: ResultedDate TimeToAdd: -1 TimeUnit: DateTime.TimeUnit.Seconds ResultedDate=> ResultedDate2
SET WeekofDay TO ResultedDate2.DayOfWeek
SWITCH WeekofDay
CASE = $'''Sunday'''
DateTime.Add DateTime: ResultedDate2 TimeToAdd: -2 TimeUnit: DateTime.TimeUnit.Days ResultedDate=> ResultedDate3
CASE = $'''Saturday'''
DateTime.Add DateTime: ResultedDate2 TimeToAdd: -1 TimeUnit: DateTime.TimeUnit.Days ResultedDate=> ResultedDate3
DEFAULT
SET ResultedDate3 TO ResultedDate2
END
今回のまとめ
型を意識しないとエラーがでやすいです。
地味ですがまだまだ続きます。(;'∀')
参考
Robin - RPA language
Power Automate Desktop の変数の処理 - Learn - Microsoft Docs