投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/19 19:45:43
My.Application.ChangeCulture() には、"ja" や "ja-JP" などのカルチャ名を渡します。
"" を渡すと、ニュートラルカルチャ(米語相当)となります。


ただし My.Application.ChangeCulture では、日付設定の
「西暦 (日本語)」「西暦 (英語)」「和暦」といった細かい設定が行えません。
カレンダーまで指定する場合は、System.Globalization.CultureInfo.CurrentCulture を
差し替える方法を使います。


これは、CultureInfo の DateTimeFormat.Calendar を切り替えることで対応できます。

Private jp As New System.Globalization.CultureInfo("ja-JP")   '日本のカルチャ 
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dic As New Dictionary(Of String, System.Globalization.Calendar)()
    Dim dfi = DirectCast(jp.DateTimeFormat.Clone(), System.Globalization.DateTimeFormatInfo)
    For Each cal In jp.OptionalCalendars   '日本のカルチャで使用可能なカレンダーを列挙 
        dfi.Calendar = cal
        dic.Add(dfi.NativeCalendarName, cal)
        Debug.WriteLine(cal.GetType().FullName)
    Next
    ComboBox1.DisplayMember = "Key"
    ComboBox1.ValueMember = "Value"
    ComboBox1.DataSource = dic.ToArray()  '使用可能なカレンダーを ComboBox に列挙してみます 
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    ' カレンダーを変更してみてみます 
    Dim cal = TryCast(ComboBox1.SelectedValue, System.Globalization.Calendar)
    If cal Is Nothing Then
        TextBox1.Text = ""
        TextBox2.Text = ""
    Else
        jp.DateTimeFormat.Calendar = cal
        System.Globalization.CultureInfo.CurrentCulture = jp
        TextBox1.Text = Now.ToString("G")

        ' CurrentCulture を差し替えるのではなく、Format あるいは ToString 時に 
        ' カルチャを指定する方法もあります。この方法だと、現在のカルチャに依存せずに 
        ' 書式を切り替えられますので、たとえば「令和2年(2020年)」などのような 
        ' 複数カルチャの文字列を扱う際にも応用できます。 
        TextBox2.Text = String.Format(jp, "{0:ggg yyyy/MM/dd HH:mm:ss.fffffff}", Now)
    End If
End Sub