システム開発・Webサイト構築 プラスラス

2006/12/6 水曜日

【.NET】書式を指定してDateTime(Date)の文字列を取得する

このエントリーを含むはてなブックマーク Yahoo!ブックマークに登録 Google ブックマーク del.icio.us

VB.NETやC#で日付型の変数から任意の書式の文字列を取得するにはDateTime(Date)構造体のToString()メソッドを使用します。

DateTimeのToString()メソッドはカルチャを明示しない場合は、実行環境の現在のカルチャに依存します。

必ず思い通りの書式で取得したい場合は、カルチャを明示する必要があります。

以下サンプルです。

現在のカルチャの書式とカルチャに依存しない書式

'VB.NETのサンプル       

'2006年12月6日が入った日付型の変数を作成 
Dim dte As Date
dte = New Date(2006, 12, 6)   

Dim str As String       

'カルチャを指定しない(現在のカルチャに依存)で文字列化 
str = dte.ToString("yyyy/MM/dd")   

'表示 
MsgBox(str)       

'IFormatProviderを指定し、 
 'カルチャに依存しないフォーマットで文字列化 
str = _
  dte.ToString("yyyy/MM/dd", _
    System.Globalization.DateTimeFormatInfo.InvariantInfo)   

'表示 
MsgBox(str)
//C#のサンプル       

//2006年12月6日が入った日付型の変数を作成 
DateTime dte;
dte = new DateTime(2006, 12, 6);       

string str;       

//カルチャを指定しない(現在のカルチャに依存)で文字列化 
str = dte.ToString("yyyy/MM/dd");       

//表示 
MessageBox.Show(str);       

//IFormatProviderを指定し、 
//カルチャに依存しないフォーマットで文字列化 
str = dte.ToString("yyyy/MM/dd",
    System.Globalization.DateTimeFormatInfo.InvariantInfo); 

//表示 
MessageBox.Show(str);

第2引数IFormatProviderのないバージョンのメソッド呼び出しでは、文字列の書式は現在のカルチャに依存した形式で出力されます。

たとえば、Windowsの”地域と言語のオプション”が和暦に指定されている環境で、実行中のスレッドのカルチャをコードで変更せずに上記のdte.ToString(“yyyy/MM/dd”)を実行した場合は、”18/12/6″(=平成18年12月6日)が出力されます。

この動作には、ユーザーの設定に合わせた結果が得られるというメリットがありますが、必ず西暦で出力されると誤解して使用すると危険です。カレンダーまで決まった形式での結果が欲しい場合は、引数IFormatProviderを指定します。

また、書式指定文字列は、大文字と小文字を区別します。たとえば、MMは”月”を意味し、mmは”分”を意味します。(VB6.0のように並びによって解釈が変わりません。)

和暦で表示させる

System.Globalization.CultureInfoDateTimeFormatSystem.Globalization.JapaneseCalendarのオブジェクトを指定することで、DateTime.ToString()の結果を和暦形式にすることができます。

'VB.NETのサンプル

'現在のシステム日付を取得
Dim dte As Date = DateTime.Now

'CultureInfoを日本語 - 日本で作成
Dim japaneseCulture As System.Globalization.CultureInfo _
            = New System.Globalization.CultureInfo("ja-JP", False)

'日付の書式に和暦を指定
japaneseCulture.DateTimeFormat.Calendar _
    = New System.Globalization.JapaneseCalendar()

'出力(年号の書式文字列はgg)            
MsgBox(dte.ToString("ggyy/MM/dd", japaneseCulture))
//C#のサンプル

//現在のシステム日付を取得
DateTime dte = DateTime.Now;

//CultureInfoを日本語 - 日本で作成
System.Globalization.CultureInfo japaneseCulture =
    new System.Globalization.CultureInfo("ja-JP", false);

//日付の書式に和暦を指定
japaneseCulture.DateTimeFormat.Calendar =
    new System.Globalization.JapaneseCalendar();

//出力(年号の書式文字列はgg)
MessageBox.Show(dte.ToString("ggyy/MM/dd", japaneseCulture));

JapaneseCalendarでサポートされる年号は明治、大正、昭和、平成の4つです。

明治より前の年号が必要だったり、年号の境界に特殊なルールが必要なプログラムでは、Calendarを継承する独自のクラスを作成すると良いでしょう。

関連記事

Filed under: C#,Programming,VB.NET — Nakai @ 23:47:52

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

HTML convert time: 0.727 sec. Powered by WordPress