C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Windowsの設定を元に数値を日付に変換


(過去ログ 101 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■60289 / inTopicNo.1)  Windowsの設定を元に数値を日付に変換
  
□投稿者/ たっくん (1回)-(2011/06/27(Mon) 11:22:32)

分類:[C#] 

2011/06/27(Mon) 11:24:32 編集(投稿者)

開発環境
VS2010 C#
XP
WPF

Windowsの地域と言語で設定された言語を元に
TextBoxに入力された数値
(yyyyMMdd)をyyyy/MM/ddに、
(ddMMyyyy)をdd-MM-yyyyに、
変換したいと思っています。

現段階では、
CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
this.textBox1.Text = DateTime.ParseExact(this.textBox1.Text, "yyyyMMdd", new System.Globalization.CultureInfo(ci.ToString())).ToString("d");
                                          ※
このようにすることで
日本語での表示は可能になっています。
ですが、他の言語に設定し実行すると
もちろんエラーになります。
問題部分は※の部分です。
言語によりフォーマットが違うためにエラーになってしまいます。

これを、上記のようなフォーマット指定をせずに、
yyyyMMddと入力されて日本語設定されていたらyyyy/MM/ddと変換
yyyyMMddと入力されて韓国語設定されていたらyyyy-MM-ddと変換
ddMMyyyyと入力されて英国語設定されていたらdd/MM/yyyyと変換
というようにしたいのですが
どのようにしたらいいのかわからず困っています。

よろしくお願いいたします。
引用返信 編集キー/
■60293 / inTopicNo.2)  Re[1]: Windowsの設定を元に数値を日付に変換
□投稿者/ shu (810回)-(2011/06/27(Mon) 11:43:23)
No60289 (たっくん さん) に返信

VB.NETですが

Dim ci = Threading.Thread.CurrentThread.CurrentCulture
Dim df = ci.DateTimeFormat
Dim sdatefmt = df.ShortDatePattern
Dim sepa = df.DateSeparator
Dim scanfmt = sdatefmt.Replace(sepa, "")

scanfmtにとりあえず"yyyyMMdd"が設定されました。
引用返信 編集キー/
■60295 / inTopicNo.3)  Re[2]: Windowsの設定を元に数値を日付に変換
□投稿者/ たっくん (2回)-(2011/06/27(Mon) 12:12:13)
No60293 (shu さん) に返信
> ■No60289 (たっくん さん) に返信
>
> VB.NETですが
>
> Dim ci = Threading.Thread.CurrentThread.CurrentCulture
> Dim df = ci.DateTimeFormat
> Dim sdatefmt = df.ShortDatePattern
> Dim sepa = df.DateSeparator
> Dim scanfmt = sdatefmt.Replace(sepa, "")
>
> scanfmtにとりあえず"yyyyMMdd"が設定されました。

ありがとうございます。
上記をC#に置き換えて実行したところ
思い描いていた動作を致しました。
ありがとうございました。
解決済み
引用返信 編集キー/
■60301 / inTopicNo.4)  Re[2]: Windowsの設定を元に数値を日付に変換
□投稿者/ 逆運の覇者 (20回)-(2011/06/27(Mon) 13:31:26)
System.Threading.Thread.CurrentThread のものと、
System.Globalization のもので
CultureInfo が一緒くたにしちゃってるような…。



地域設定にあわせて一括なら。
  textBox1.Text = DateTime.ParseExact("02/01/2000", ci.DateTimeFormat.ShortDatePattern, null).ToString();


もしくは、地域別にフォーマットのカスタマイズ設定するなら
    System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
    string format = "";
    if (ci.ToString() == "jp-JP")
    {
        format = "yyyy/MM/dd";
    }
    else if (ci.ToString().ToString() == "ko-KR")
    {
        format = "yyyy-MM-dd";
    }
    else if (ci.ToString() == "en-GB")
    {
         format = "dd/MM/yyyy";
    }
    textBox1.Text = DateTime.ParseExact("02/01/2000", format, null).ToString();

引用返信 編集キー/
■60307 / inTopicNo.5)  Re[3]: Windowsの設定を元に数値を日付に変換
□投稿者/ たっくん (4回)-(2011/06/27(Mon) 14:46:41)
No60301 (逆運の覇者 さん) に返信
ありがとうございます。
> System.Threading.Thread.CurrentThread のものと、
> System.Globalization のもので
> CultureInfo が一緒くたにしちゃってるような…。
>
>
>
> 地域設定にあわせて一括なら。
>   textBox1.Text = DateTime.ParseExact("02/01/2000", ci.DateTimeFormat.ShortDatePattern, null).ToString();
この方法でやってみましたら
文字列は有効な DateTime ではありませんでした。
というエラーになりました・・・

> もしくは、地域別にフォーマットのカスタマイズ設定するなら
> System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
> string format = "";
> if (ci.ToString() == "jp-JP")
> {
> format = "yyyy/MM/dd";
> }
> else if (ci.ToString().ToString() == "ko-KR")
> {
> format = "yyyy-MM-dd";
> }
> else if (ci.ToString() == "en-GB")
> {
> format = "dd/MM/yyyy";
> }
> textBox1.Text = DateTime.ParseExact("02/01/2000", format, null).ToString();

地域と言語で設定する言語は何十種類とあるので
上記の方法ですと
かなりの行数になってしまうため
今回は使うことが出来ませんが
今後、機会があれば使用したいと思います。
ありがとうございます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -