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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.60289 の関連記事表示

<< 0 >>
■60289  Windowsの設定を元に数値を日付に変換
□投稿者/ たっくん -(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と変換
    というようにしたいのですが
    どのようにしたらいいのかわからず困っています。

    よろしくお願いいたします。
親記事 /過去ログ101より / 関連記事表示
削除チェック/

■60293  Re[1]: Windowsの設定を元に数値を日付に変換
□投稿者/ shu -(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"が設定されました。
記事No.60289 のレス /過去ログ101より / 関連記事表示
削除チェック/

■60301  Re[2]: Windowsの設定を元に数値を日付に変換
□投稿者/ 逆運の覇者 -(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();
記事No.60289 のレス /過去ログ101より / 関連記事表示
削除チェック/

■60307  Re[3]: Windowsの設定を元に数値を日付に変換
□投稿者/ たっくん -(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();

    地域と言語で設定する言語は何十種類とあるので
    上記の方法ですと
    かなりの行数になってしまうため
    今回は使うことが出来ませんが
    今後、機会があれば使用したいと思います。
    ありがとうございます。
記事No.60289 のレス /過去ログ101より / 関連記事表示
削除チェック/

■60295  Re[2]: Windowsの設定を元に数値を日付に変換
□投稿者/ たっくん -(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#に置き換えて実行したところ
    思い描いていた動作を致しました。
    ありがとうございました。
記事No.60289 のレス / END /過去ログ101より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -