FAQ
西暦から和暦に変換する方法

ナレッジ番号:5312 | 登録日:2023/07/26 | 更新日:2024/11/21

概要

西暦を和暦に変換するサンプル コードです。

日本の元号は年の途中で変更となるため、正確に識別するには月日も確認する必要があります。

Image

サンプル コード

アクティブなデータ フレームの最上位レイヤーが参照するフィーチャクラスの "seireki" フィールド(Date型)に格納された日付から和暦表示を取得します。明治以降の和暦に対応しています。

このコードは ArcMap アドインを想定しています。

//最上位のレイヤーのフィーチャクラスを取得し、ITableにキャスト
IMxDocument pMxDocument = ArcMap.Document;
IMap pMap = pMxDocument.FocusMap;
IFeatureLayer pFeatureLayer = (IFeatureLayer)pMap.get_Layer(0);
ITable pTable = (ITable)pFeatureLayer.FeatureClass;

//変換例として OID = 1 のデータを取得
IRow pRow = pTable.GetRow(1); 

//3つめのフィールドを取得 (最初のフィールドは "0" なので、seireki フィールドは ”2”)
System.DateTime pDate = (System.DateTime)pRow.get_Value(2);

System.DateTime MeijiEnd = DateTime.Parse("1912/07/29");     //明治の最終日
System.DateTime TaisyoEnd = DateTime.Parse("1926/12/24");    //大正の最終日
System.DateTime ShowaEnd = DateTime.Parse("1989/01/07");     //昭和の最終日

String gengo;
System.Int32 ayear;
if (pDate <= MeijiEnd)
{
   gengo = "明治";
   ayear = pDate.Year - 1867;
}
else if (pDate <= TaisyoEnd)
{
   gengo = "大正";
   ayear = pDate.Year - 1911;
}
else if (pDate <= ShowaEnd)
{
   gengo = "昭和";
   ayear = pDate.Year - 1925;
}
else
{
   gengo = "平成";
   ayear = pDate.Year - 1988;
}

String wareki = gengo + ayear + "年" + pDate.Month + "月" + pDate.Day + "日";
 
//変換した結果を出力する。
MessageBox.Show(wareki);
'最上位のレイヤーのフィーチャクラスを取得し、ITableにキャスト
Dim pMxDocument As IMxDocument = My.ArcMap.Document
Dim pMap As IMap = pMxDocument.FocusMap
Dim pFeatureLayer As IFeatureLayer = pMap.Layer(0)
Dim pTable As ITable = pFeatureLayer.FeatureClass

'変換例として OID = 1 のデータを取得
Dim pRow As IRow = pTable.GetRow(1)

'3つめのフィールドを取得 (最初のフィールドは "0" なので、seireki フィールドは ”2”)
Dim pDate As System.DateTime = pRow.Value(2)

Dim MeijiEnd As System.DateTime = "1912/07/29"                    '明治の最終日
Dim TaisyoEnd As System.DateTime = "1926/12/24"                   '大正の最終日
Dim ShowaEnd As System.DateTime = "1989/01/07"                    '昭和の最終日

Dim gengo As String
Dim ayear As Integer
If pDate <= MeijiEnd Then
   gengo = "明治"
   ayear = Year(pDate) - 1867
ElseIf pDate <= TaisyoEnd Then
   gengo = "大正"
   ayear = Year(pDate) - 1911
ElseIf pDate <= ShowaEnd Then
   gengo = "昭和"
   ayear = Year(pDate) - 1925
Else
   gengo = "平成"
   ayear = Year(pDate) - 1988
End If

Dim wareki As String = gengo & ayear & "年" & pDate.Month & "月" & pDate.Day & "日"

'変換した結果を出力する。
MessageBox.Show(wareki)

メタデータ

種類

製品