- ベストアンサー
[C#]文字列の編集について
VSS2005でC#の勉強をしています。 "20070216 235959"という文字列を"2007/02/16 23:59:59"に整形し DateTimeにパースして「2007年2月16日(金) 23:59:59」と表示したいのですが "2007/02/16 23:59:59"からDateTimeにパースすることは出来ましたが "20070216 235959"を"2007/02/16 23:59:59"に編集する処理が分かりません。どなたか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
string hoge = "20070216 235959"; string format = "yyyyMMdd HHmmss"; datetime hogehoge = DateTime.ParseExact(hoge,format,null); string hage = hogehoge.ToString("F"); System.Diagnostics.Debug.WriteLine(hage); パースまで行っているのになんで???
その他の回答 (2)
No.1の者です。 あまりに手でゴリゴリとやりすぎました。 いいかげんな回答ですみません。
Cでの例です。C#ではどうなるか、わかりません。 #include <stdio.h> int main(void) { char str1[] = "YYYYMMDD hhmmss"; char str2[40]; /* 適切なサイズにする */ int i, j; for (i = j = 0; str1[i];) { str2[j++] = str1[i++]; if (i == 4 || i == 6) str2[j++] = '/'; if (i == 11 || i == 13) str2[j++] = ':'; } str2[j] = '\0'; printf("変換前:%s\n", str1); printf("変換後:%s\n", str2); return 0; } (注)インデントのため、全角空白を使っています。
お礼
ありがとうございました。Format関数で書式指定して変換することばかり考えていたのですが単純に連結すれば良かったのですね。 C#で以下のように記述してみたところ、期待する値が取得できました。 string str1 = "20070216 235959"; StringBuilder sb = new StringBuilder(); for (int i = 0; i<str1.Length; i++) { sb.Append(str1[i]); if (i == 3 || i == 5) { sb.Append("/"); } if (i == 10 || i == 12) { sb.Append(":"); } } DateTime dt = DateTime.Parse(sb.ToString()); Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss"));
お礼
No1の方へのお礼登校フォームをしばらく開きっぱなしにしていたので 気づくのが遅れましたが、ありがとうございました。これはシンプルですね。 というかParseでそのまま指定してやれば良かったのですね・・・・・ No1の方へのお礼にも書きましたがString.Formatで文字列を変えてからやらねばだめだと思い込んでいたので String.Format("{0:yyyy/MM/dd HH:mm:ss", "20070216 235959"); String.Format("####/##/## ##:##:##", "20070216 235959"); などと繰り返して悶々としていました。