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

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

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

Re[2]: DateTime の変換方法について教えてください


(過去ログ 128 を表示中)

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

■76157 / inTopicNo.1)  DateTime の変換方法について教えてください
  
□投稿者/ よぽん (27回)-(2015/06/04(Thu) 11:43:46)

分類:[.NET 全般] 

今日の日付 2015/06/03 だとすれば
 DateTime.ToString("yyyyMMdd") ⇒ "20150603"
になりますよね

では、この逆で
int IDate = 20150603;
の日付を DateTime にするにはどうすればよいですか?

string sdate = IDate.ToString();
int iy = int.Parse(sdate.SubString(0, 4);
int im = int.Parse(sdate.SubString(4, 2);
int id = int.Parse(sdate.SubString(6, 2);
で求めるしかないのでしょうか?

やり方はわかりませんが形式文字列を使う方法
 (sdate, "?????", iy, im, id)
Cでいうところの scanf とかでしょうか?


引用返信 編集キー/
■76158 / inTopicNo.2)  Re[1]: DateTime の変換方法について教えてください
□投稿者/ ぽぴ王子 (28回)-(2015/06/04(Thu) 11:46:04)
ぽぴ王子 さんの Web サイト
No76157 (よぽん さん) に返信

これでどうでしょうか。
http://dobon.net/vb/dotnet/string/datetimeparse.html
引用返信 編集キー/
■76160 / inTopicNo.3)  Re[1]: DateTime の変換方法について教えてください
□投稿者/ なちゃ (46回)-(2015/06/04(Thu) 16:03:18)
No76157 (よぽん さん) に返信
> 今日の日付 2015/06/03 だとすれば
>  DateTime.ToString("yyyyMMdd") ⇒ "20150603"
> になりますよね
>
> では、この逆で
> int IDate = 20150603;
> の日付を DateTime にするにはどうすればよいですか?
>
> string sdate = IDate.ToString();
> int iy = int.Parse(sdate.SubString(0, 4);
> int im = int.Parse(sdate.SubString(4, 2);
> int id = int.Parse(sdate.SubString(6, 2);
> で求めるしかないのでしょうか?

例えば10000て割れば年が計算できますよね?
10000で割った余りを100で割れば月が、
100で割った余りで日が出ますね?
あとは各数値を元にDateTimeを作成するだけです。
なお、変換は共通メソッド等にしておくことを強くおすすめします。
利用場所で都度直接計算は書かないようにしてください。
引用返信 編集キー/
■76161 / inTopicNo.4)  Re[2]: DateTime の変換方法について教えてください
□投稿者/ なちゃ (47回)-(2015/06/04(Thu) 16:07:41)
int iy = iDate / 10000;
int im = (iDate % 10000) / 100;
int id = iDate % 100;
みたいな。
引用返信 編集キー/
■76162 / inTopicNo.5)  Re[1]: DateTime の変換方法について教えてください
□投稿者/ 魔界の仮面弁士 (374回)-(2015/06/04(Thu) 18:09:54)
No76157 (よぽん さん) に返信
> 今日の日付 2015/06/03 だとすれば
>  DateTime.ToString("yyyyMMdd")

正確には、
  DateTime.Today.ToString("yyyyMMdd")
ですね。ToString は静的メソッドではありませんので。


> ⇒ "20150603"
> になりますよね
そうとは限りません。たとえば当方環境では、OS 設定を「和暦」にしているため、
"20150603" ではなく、"270603" が返されることになります。

コントロールパネルの設定によらず、アプリケーションを西暦モードで運用したいなら、
Thread.CurrentThread.CurrentCulture を事前に設定しておくか、あるいは、
 .ToString("yyyyMMdd", CultureInfo.InvariantCulture);
のように、ToString や String.Format にて、カルチャを明示指定するのが良いでしょう。


> では、この逆で
> int IDate = 20150603;
> の日付を DateTime にするにはどうすればよいですか?

私なら、
 元データが「数値(整数)」なら DateTime.TryParseExact メソッド
 元データが「数字(文字列)」なら No76161 のコードの後で dt = new DateTime(iy, im, id);
という感じですね。


ただし、変換元の値に、99999999 とか 20150431 といった
日付として正しくない値が入ってくる可能性がある場合は、
TryParseExact の方が都合が良いかと思います。
引用返信 編集キー/
■76167 / inTopicNo.6)  Re[2]: DateTime の変換方法について教えてください
□投稿者/ shu (755回)-(2015/06/05(Fri) 09:14:25)
No76162 (魔界の仮面弁士 さん) に返信
> 私なら、
>  元データが「数値(整数)」なら DateTime.TryParseExact メソッド
>  元データが「数字(文字列)」なら No76161 のコードの後で dt = new DateTime(iy, im, id);
> という感じですね。
これ逆の気がします。
引用返信 編集キー/
■76183 / inTopicNo.7)  Re[1]: DateTime の変換方法について教えてください
□投稿者/ よぽん (29回)-(2015/06/09(Tue) 10:21:45)
みなさんありがとうございました。

ParseExactで処理できました。

System.Globalization.DateTimeFormatInfo.InvariantInfo
System.Globalization.DateTimeStyles.None

については、ちょっとわからないですけど
おまじないってことでぇ〜


   string datestr = DateTime.Now.ToString("yyyyMMdd");

   DateTime dt1 = System.DateTime.ParseExact(datestr,
      "yyyyMMdd",
      System.Globalization.DateTimeFormatInfo.InvariantInfo,
      System.Globalization.DateTimeStyles.None);

   MessageBox.Show(dt1.ToString());

引用返信 編集キー/
■76184 / inTopicNo.8)  Re[2]: DateTime の変換方法について教えてください
□投稿者/ よぽん (30回)-(2015/06/09(Tue) 10:24:54)
和暦の考慮してませんでした。


ありがとうございました
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -