【UiPath】日付変換のあれこれ

# はじめに
UiPathを用いて自動化を行う上で使用する頻度の高い日付変換について、実務で使ったものを備忘録代わりにまとめました。
また、使用例として画面キャプチャに使用したサンプルファイルをGitHubへアップしています。
GitHubリンク：https://github.com/odm-cckte0122/DateTimeSample

## 1.文字列(String型)をDateTime型に変換

**DateTime.Parse** メソッドを使用します。

~~~
DateTime.Parse(変換したい文字列)
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176879/6c96a1c8-4370-9026-f719-ceb9e8b0d4b0.png)

参考リンク：
[DateTime.Parseメソッド(Microsoft Document)](https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.parse?view=net-5.0)

## 2.DateTime型の変数を任意の表記に変換
**ToString**メソッドを使用します。

~~~
DateTime型の変数.ToString(表示形式)
~~~

### 表示形式の例

| 書式指定子 | 説明 | 使用例 |
|:-:|:-:|:-:|
| yyyy | 年 (西暦) | <font color="red">**2020**</font> /12/13 14:30:00 の場合 -> 2020  |
| yy | 年（和暦）<br>※ロケール情報が日本(ja-JP)の場合 | 2018/12/13 14:30:00 の場合 -> 30(平成30年)<br>2020/12/13 14:30:00 の場合 -> 02(令和2年) |
| MM | 月 (01 ～ 12) | 2020/<font color="red">**01**</font>/12 15:00:00 の場合 -> 01 <br> 2020/<font color="red">**12**</font>/13 14:30:00 の場合 -> 12  |
| dd | 月の日にち (01 ～ 31) | 2020/01/<font color="red">**05**</font> 15:00:00 の場合 -> 05 <br> 2020/12/<font color="red">**13**</font> 14:30:00 の場合 -> 13 |
| HH | 24 時間形式の時間 (01 ～ 24) | 2020/01/12 <font color="red">**05**</font>:00:00 の場合 -> 05 <br> 2020/12/13 <font color="red">**14**</font>:30:00 の場合 -> 14 |
| hh | 12 時間形式の時間 (01 ～ 12) | 2020/01/05 <font color="red">**05**</font>:00:00 の場合 -> 05 <br> 2020/12/13 <font color="red">**14**</font>:30:00 の場合 -> 02 |
| mm | 分 (00 ～ 59) | 2020/01/05 05:<font color="red">**08**</font>:00 の場合 -> 08 <br> 2020/12/13 14:<font color="red">**42**</font>:00 の場合 -> 42 |
| ss | 秒 (00 ～ 59) | 2020/01/05 05:08:<font color="red">**07**</font> の場合 -> 07 <br> 2020/12/13 14:42:<font color="red">**58**</font> の場合 -> 58 |
| ddd | 曜日の省略名 | 2020/12/15 05:00:00 の場合 -> Tue<br>※ロケール情報が日本(ja-JP)の場合は 火 |

今日の日付(12/15)を「2020/12/15(Tue)」と表記したい場合
⇒DateTime型の変数.ToString("yyyy/MM/dd(ddd)")
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176879/8b39cbbb-7def-d146-bef2-fb66378c5b9b.png)


参考リンク：
[カスタム日時形式(Microsoft Document)](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings)


## 3.任意のロケール情報を用いてDateTime型の情報を表示
環境によっては、端末に設定されているロケール情報がアメリカ合衆国(en-US)になっている場合があります。
その場合、曜日や月の情報を出力しようとすると英語表記になってしまいます。

曜日情報を日本語で表示するには、明示的にロケール情報を日本(ja-JP)に変更する必要があります。
**方法１：現在のロケール情報(CurrentCulture)を変更する**
　　　　① [代入]アクティビティで以下の通り設定
　　　　　左辺： System.Threading.Thread.CurrentThread.CurrentCulture
　　　　　右辺： new System.Globalization.CultureInfo("ja-JP")
　　　　　※代入対象が変数ではないため、変数の作成は不要
　　　　②表示形式を選択し出力
　　　　　例）DateTime型の変数.ToString("yyyy/MM/dd(ddd)")
　　　　　　　→投稿日時点の場合、「2020/12/15(火)」と表記されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176879/48ccb87a-8a97-67a7-71f3-04db54a1d98d.png)

**方法２：日本のロケール情報を保持した変数を作成し、値を表示する際に参照する**
　　　　①[代入]アクティビティで以下の通り設定
　　　　　左辺：　System.Globalization.CultureInfo型の変数
　　　　　右辺：　new System.Globalization.CultureInfo("ja-JP")
　　　　②表示形式を選択する際、第２パラメーターとして①の変数を指定する
　　　　　例）DateTime型の変数.ToString("yyyy/MM/dd(ddd)",CultureInfo型の変数)
　　　　　　　→方法１と同じ結果が出力されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176879/b7ec673d-08b5-02a0-8e6a-08084261f3e5.png)


参考リンク：
[DateTime型の表示形式で日本語の曜日を出す方法(UiPath Forum)](https://forum.uipath.com/t/datetime/211831)
[CultureInfoクラス(Microsoft Document)](https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.cultureinfo?view=net-5.0)

## 4.任意の文字列(String型)をDateTime型に変換

**DateTime.ParseExact**メソッドを使用します。

~~~
DateTime.ParseExact(変換したい文字列, 変換文字列の表示形式, ロケール情報)
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176879/3eb9b7d3-3243-6717-07ff-1f7f026bd660.png)

参考リンク：
[DateTime.ParseExactメソッド(Microsoft Document)](https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime.parseexact?view=net-5.0)

# さいごに
備忘録ということでこちらにもまとめておりますが、ロケール情報については[UiPath Forum](https://forum.uipath.com/)で質問し、即座に回答いただいたものになります。ご教示いただいたYoichiさんに改めてこの場でお礼申し上げます。
また、日付に関する操作は触れる機会が多いにも関わらず、VB.NETの知識が求められることが多いです。
上記以外にも「こうしたい」「どうやってやるんだろう」といった、やりたいことは明確だが、実現方法が分からない場合は、
UiPath Forumでの質問に加えて、「やりたいこと　VB.Net」で調べると案外参考になるサイトがたくさん出てきますので、一度調べてみるのもおすすめです。

今年もアドベントカレンダーに参加できて光栄です！最後までお読みいただきありがとうございました。