10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Power Automate】頻出する日時処理まとめ

Last updated at Posted at 2024-04-17

はじめに

とある社内システムの開発にあたりさまざまな日時パターンのに遭遇したので、備忘録としてその取得、処理方法について整理しておきます。

現在日時の取得

① アクション:現在の時刻

image.png

実行結果:

image.png

② 関数:utcNow

utcNow()
実行結果
2024-04-16T06:57:51.3035667Z
utcNow('yyyy-MM-dd')
実行結果
2024-04-16

utcNowで取得される日時はUTC(協定世界時)なので、JST(日本標準時 UTC+9時間)に変換する必要があります。

タイムゾーンの変換

① アクション:タイムゾーンの変換

image.png

実行結果:

image.png

② 関数:convertFromUTC

convertTimeZone(utcNow(),'Tokyo Standard Time','yyyy-MM-ddTHH:mm:ss')
実行結果
2024-04-16T15:57:51

2つのタイムゾーンの差がわかっている場合は、単純な時間の足し算でタイムゾーンを変換することもできます。

③ アクション:時間への追加

image.png

実行結果:

image.png

④ 関数:addHours

addHour(utcNow(),9,'yyyy-MM-ddTHH:mm:ss')
実行結果
2024-04-16T15:57:51

Dataverse はUTCで保存されるため、JSTに変換する必要はありません。

フォーマットの変更

① 関数:formatDateTime

formatDateTime('2024-04-16T15:57:51','yyyy年MM月dd日HH時')
実行結果
2024年04月16日15時
formatDateTime('2024-04-16T06:57:51Z','yyyy/MM/dd hh:mm')
実行結果
2024/04/12 06:57

MM(大文字)は月(Month)、mm(小文字)は分(minute)を表します。
HH(大文字)は24時間表記、hh(小文字は)12時間表記を表します。

その他のカスタム形式はこちらの公式ドキュメントを参照ください。
https://learn.microsoft.com/ja-jp/office/vba/api/access.format.propertydate.time#custom-formats

月初日の取得

① 現在の日時から取得

utcNow('yyyy-MM-01')
実行結果
2024-04-01

② 特定の日時から取得

formatDateTime('2024-04-16','yyyy-MM-01')
実行結果
2024-04-01

月末日の取得

月初日の取得 → 翌月初日の取得(+1カ月)→ 月末日の取得(-1日)で取得します。

image.png

時間への追加:式
utcNow('yyyy-MM-01')
作成:式
addDays(body('時間への追加'),-1,'yyyy-MM-dd')

実行結果:

image.png

「間隔」を12に変更することで、1年後の末日を取得することができます。また、「基準時間」を現在日時にすることで、単純な1カ月後、1年後の日時を取得することができます。

※ 補足1:うるう年(4の倍数)の場合

image.png

※ 補足2:うるう年(100の倍数)の場合

image.png

うるう年の場合も同様の処理で取得できます。

UNIXタイムスタンプ ↔ 日時 の変換

① UNIXタイムスタンプ(秒) → 日時(JST)

addHours(addseconds('1970-1-1',1712923519),9,'yyyy-MM-ddTHH:mm:ssZ')
実行結果
2024-04-12T21:05:19Z

UNIXタイムスタンプとは、1970年1月1日0時0分0秒(UTC)からの経過秒数で表される時間です。

② 日時(JST) → UNIXタイムスタンプ(秒)

div(sub(ticks(addHours('2024-04-12T21:05:19Z',-9),ticks('1970-1-1')),10000000)
実行結果
1712923519

ticks関数は、0001年1月1日0時0分0秒(UTC)から指定した日時までのティック数(10,000,000ティック=1秒)を返します。そのため、特定の日時(UTC)のティック数と1970年1月1日0時0分0秒(UTC)のティック数の差分をとってから10,000,000で割ることで、UNIXタイムスタンプ(秒)が得られます。

おわりに

この記事では、個人的によく使用するさまざまな日時パターンの取得と処理についてまとめました。一部の日時操作はアクションや関数の使用にさまざまな選択肢がありますが、個人的には式で書ける「関数」、汎用的に利用できる「アクション:時間への追加」を多用しています。

今回が初めてのQiita投稿になりますが、今後も継続的にPowerPlatformに関するお役立ち情報を発信していきますので、どうぞよろしくお願いします。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?