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は、やれることは多いんだけど、調べるのが大変だ。