【UiPath】西暦から和暦変換の方法について

# はじめに
ロボでは日付情報のデータ入力を行うケースがあります。その中で仕事内容によっては和暦で入力を行うケースもあります。
今回はロボ実行日(西暦)のデータを和暦に変換するナレッジを残します。

# この記事の対象者
- UiPath初学者
- UiPath Studioで西暦から和暦変換を行いたい方

# 目次
1. 開発環境紹介
1. 処理要件確認
1. 実装
1. 解説


# 開発環境紹介
- OS：Windows11
- 開発ツール：UiPath Studio
- バージョン：2023.10.0
- ライセンス：Community License
- モダン デザイン エクスペリエンス：いいえ
- Microsoft Excel：2310

:::note warn
- 本投稿の開発環境になっております
- バージョンによっては画面が一部異なる可能性はございます
:::

### UiPath 依存関係
| パッケージ名 | バージョン |
|:--|:--|
| UiPath.Excel.Activities | 2.22.2 |
| UiPath.Mail.Activities | 1.21.1 |
| UiPath.System.Activities | 23.10.2 |
| UiPath.Testing.Activities | 23.10.0 |
| UiPath.UIAutomation.Activities | 23.10.3 |

# 処理要件確認
- ロボ実行日(西暦)のデータを和暦変換を行う

# 実装
### Invoke Codeのみ_完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/fde87319-3e6f-ce89-6284-f35f7146d5f5.png)

### 「コードを呼び出し」アクティビティを利用したDictionaryの設定値 (コードを呼び出し：和暦情報をセット)
~~~vb:コードを呼び出し：和暦情報をセット
'====================
'処理概要：和暦情報をセット

'IN：なし
'OUT：
  'OutDicJapaneseCalendarItem：和暦データ
    'KEY：元号
    'KEY：年
    'KEY：月
    'KEY：日
    'KEY：曜日
'IO：なし
'====================

OutDicJapaneseCalendarItem = New Dictionary(Of String,String)

Dim processDay As DateTime = DateTime.Now
' カルチャを日本語(ja-JP)に設定する。
Dim cultureInfo As New System.Globalization.CultureInfo("ja-JP", True)
cultureInfo.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()

'dicCalendarItem
OutDicJapaneseCalendarItem("元号") = processDay.ToString("gg",cultureInfo)
OutDicJapaneseCalendarItem("年") = processDay.ToString("yy",cultureInfo)
OutDicJapaneseCalendarItem("月") = processDay.ToString("MM",cultureInfo)
OutDicJapaneseCalendarItem("日") = processDay.ToString("dd",cultureInfo)
OutDicJapaneseCalendarItem("曜日") = processDay.ToString("ddd",cultureInfo)
~~~

### コードを呼び出し：和暦情報をセット　 「呼び出されたコード引数」
| Name | Direction | Type | Value |
|:--|:--|:--|:--|
| OutDicJapaneseCalendarItem | 出力 | Dictionary<String,String> | dicCalendarItem |



### 代入アクティビティ利用_完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/9f357a38-24ab-6d31-6a36-f9888f22fb6f.png)

### 変数情報
| 名前 | 変数の型 | スコープ | 規定 | 注釈 |
|:--|:--|:--|:--|:--|
| processDay | DateTime | DataConversion_JapaneseCalendar | | ロボ実行日　|
| cultureInfo | Cultureinfo | DataConversion_JapaneseCalendar | | カルチャ情報　|
| strEra | String | DataConversion_JapaneseCalendar | | 元号　|
| strYear | String | DataConversion_JapaneseCalendar | | 年　|
| strMonth | String | DataConversion_JapaneseCalendar | | 月　|
| strDay | String | DataConversion_JapaneseCalendar | | 日　|
| strDayOfWeek | String | DataConversion_JapaneseCalendar | | 曜日　|

### 実装補足
System.DateTime
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/f0446c63-35cf-e0ac-e1a9-94fa0ec419e6.png)

System.Globalization.Cultureinfo
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524399/9505c82c-a797-7033-4e0a-0c0610ca524a.png)



~~~vb:アクティビティ設定情報
'代入：ロボ実行日
processDay = DateTime.Now
'代入：カルチャ情報_日本
cultureInfo = New CultureInfo("ja-JP")
'代入：カレンダー情報の設定_日本
cultureInfo.DateTimeFormat.Calendar = New JapaneseCalendar
'代入：元号
strEra = processDay.ToString("gg",cultureInfo)
'代入：年
strYear = processDay.ToString("yy",cultureInfo)
'代入：月
strMonth = processDay.ToString("MM",cultureInfo)
'代入：日
strDay = processDay.ToString("dd",cultureInfo)
'代入：曜日
strDayOfWeek = processDay.ToString("ddd",cultureInfo)
'メッセージをログ：和暦情報出力
String.Format("{0}{1}年{2}月{3}日{4}曜日",strEra,strYear,strMonth,strDay,strDayOfWeek)
~~~

# 解説
西暦から和暦変換を行うためには、日本のカレンダー情報を取得する必要があります。
日本のカレンダー情報を取得後は現在の日付を軸にデータを取得することにより完成します。

# おわりに
今回はロボ実行日(西暦)のデータを和暦に変換するナレッジまとめました。
システムによって和暦情報は漢字ではなくアルファベットで表示するケースがあります。
その場合は和暦に対してデータ変換(Replace)等で対処するなど、今回の記事をもとに応用することは可能です。
今回の記事で誰かの参考になれば幸いです

# 参考サイト
[CultureInfo クラス](https://learn.microsoft.com/ja-jp/dotnet/api/system.globalization.cultureinfo?view=net-8.0)
[JapaneseCalendar クラス](https://learn.microsoft.com/ja-jp/dotnet/api/system.globalization.japanesecalendar?view=net-7.0)
[DateTime 構造体](https://learn.microsoft.com/ja-jp/dotnet/api/system.datetime?view=net-7.0)
[[C#] カルチャ名一覧](https://csharp.programmer-reference.com/culturename-list/)
[【UiPath】日付や時間の操作をサンプル付きで紹介](https://penrako.com/uipathdate/)
[【できるUiPath】変数とインスタンスを使って西暦を和暦に変更しよう](https://dekiru.net/article/17805/)