VBで「August 31, 2012」のフォーマットで日付を表示させる方法

VBで、どうしても「アルファベットの月表示 日, 年」のフォーマットで出力する必要があった。
表示が「August 31, 2012」になるように整えなければならなったのだ。
(今回は、本当にVB.NETでやった。古くて大変だった・・・)
いろいろと調べてみると、上のフォーマットに曜日や時間つきで
表示するフォーマットはあったが、月と日と年だけを表示するという
フォーマットはなかった。

組み合わせることによって、下記のフォーマットでいけることが判明。

 "MMMM d, yyyy"

ポイントは、MMMMのところ。これにより、月が省略されない形で表示される。

しかし、問題はこれだけではなく、日付の出力では実行環境のロケールをみていることが判明。
英語で出力しようとしていたら、日本語で出力されて、文字化け。
(ちなみにどんな日本語で出力されたかは不明・・・)
整形して出力する際に、ロケールを指定する必要があった。

こんな感じで書くとよい

 Dim usDate as Date = Date.Now()
 Dim culture As New System.Globalization.CultureInfo("en-us")
 Label.text = usDate.ToString("MMMM d, yyyy", culture)

関数にするなら、こんな感じ。
(日付フォーマット以外の文字列を渡すとクラッシュするので、その場合は空文字を返すようにしている)

     '----------------------------------------------------
     ' August 31, 2012 のフォーマットで文字列を返す関数
     '----------------------------------------------------
     Private Function getDateMDYformat(ByVal str As String)
         Try
             Dim usDate As Date = str
             Dim culture As New System.Globalization.CultureInfo("en-us")
             Return usDate.ToString("MMMM d, yyyy", culture)
         Catch ex As Exception
             Return ""
         End Try
 
     End Function

ロケールによって出力が変わるというところは、かなりハマった。
CultureInfoでちゃんと指定してやれば、US以外のフォーマットでも出せるとわかったのはめっけもん。
VBは、やれることは多いんだけど、調べるのが大変だ。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする