日付と時刻を取得する2つの方法

「現在の日時を取得します」というアクションで文字通りそれを実行した日付と時刻が取得できる。

「現在の日時を取得します」アクション

f:id:yujihb:20211014010958j:plain

f:id:yujihb:20211014011006j:plain

「現在の日時を取得します」の実行結果

f:id:yujihb:20211014011013j:plain

「現在の日時を取得します」の出力結果には区切り文字が3種類(/と:とスペース)でAM/PMの表現が含まれる。さらに月/日/年というなんともアメリカンな年月日の順番である。ヤード・ポンド・月/日/年。

CurrentDateTmeに付随する変数の値を使う

この取得した変数CurrentDateTimeそのままの形式だとかなり扱いづらい。一方で、CurrentDateTimeに付随する形で年・月・日・時刻・曜日等を個別に格納した変数が同時に生成されており、CurrentDateTime自体ではなく主にこれら個別の値をつかって必要な形に加工して使えそうである。

f:id:yujihb:20211017152706j:plain

f:id:yujihb:20211017153140j:plain

f:id:yujihb:20211017153514j:plain

CurrentDateTime.Secondには現在の時刻の秒の値が入っている。上記画面の処理を実行した時刻は15時34分05秒。時分秒は6ケタの「153405」がほしい値であったが実際は「15345」であった。CurrentDateTime.Secondに05ではなくて5が格納されているためだ。おそらく月・日・時・分も1ケタの数値は同様に1ケタで格納される仕様と思われる。アクションのひとつ「テキストをパディング」により2ケタになるように0で埋めることもできるが、CurrentDateTime.Second、CurrentDateTime.Minuteなどなど月・日・時・分・秒のすべてに「テキストをパディング」するとフロー上のアクションが5行以上にもなり見た目が冗長となる。もう少しアクション数をすくなくする方法はないだろうか。

DOSコマンドで日時を取得する

そこでアクション数を少なくするためDOSコマンドを使ってみる。dateコマンドとtimeコマンドで日時を取得する。

DOSコマンドで日時を取得するフローの例

f:id:yujihb:20211014011334j:plain

以下のコマンドを入力する

echo %%date:~0,4%%%%date:~5,2%%%%date:~8,2%%_%%time:~0,2%%%%time:~3,2%%%%time:~6,2%%

「%」はPower Automate Desktopでは変数の始まりや終わりを表す特別な文字なのでそのまま入力はできない。エスケープして「%%」と入力すると、DOSコマンドの「%」と認識してもらえる。

f:id:yujihb:20211014011344j:plain

スペースを0に置換する

timeコマンドでは時間のひとけた目が0である場合(=午前0時から午前9時の場合)にスペースが出力されてしまうのでこれを0に置換する。

f:id:yujihb:20211014011353j:plain

最後に仕上げでトリミングをし日付と時刻をアンダースコアで区切ったこんな形式

f:id:yujihb:20211014011402j:plain

アクション数が少なくなり再利用もしやすくなってよかった。