tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル文字列を日付型へ変換
記事No7618
投稿日: 2008/05/27(Tue) 15:05
投稿者ダンボ
VB6掲示板での同名の質問と回答
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=12331&page=0
から、
 CDate(Format("20080522", "0000\/00\/00"))
はスマートでよいなぁと思い、VB2005で使ってみましたが駄目ですね。
「String "0000\/00\/00" から型 'Date' への変換は無効です」
という例外が起きてしまいます。

strDateに"20080522"が入っているとして、
DateSerial(CInt(strDate.Substring(0, 4)), CInt(strDate.Substring(4, 2)), CInt(strDate.Substring(6, 2)))
というのが、私のオリジナルなコードで、正しく動作するんですが泥臭い。

スマートなコードありますか?

[ツリー表示へ]
タイトルRe: 文字列を日付型へ変換
記事No7619
投稿日: 2008/05/27(Tue) 15:39
投稿者花ちゃん
>  CDate(Format("20080522", "0000\/00\/00"))
> はスマートでよいなぁと思い、VB2005で使ってみましたが駄目ですね。
> 「String "0000\/00\/00" から型 'Date' への変換は無効です」
> という例外が起きてしまいます。

下記なら、一応 通ります。
CDate(Format(CDbl("20080522"), "0000\/00\/00"))
CDate(Format(20080522, "0000\/00\/00"))

[ツリー表示へ]
タイトルRe: 文字列を日付型へ変換
記事No7620
投稿日: 2008/05/27(Tue) 15:43
投稿者魔界の仮面弁士
>  CDate(Format("20080522", "0000\/00\/00"))

Dim dt As Date = Date.ParseExact("20080522", "yyyyMMdd", CultureInfo.InvariantCulture)

[ツリー表示へ]
タイトル[解決] 文字列を日付型へ変換
記事No7624
投稿日: 2008/05/28(Wed) 09:40
投稿者ダンボ
花ちゃん さん、魔界の仮面弁士 さん、どうも有り難うございます。

Date.ParseExact(strDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture)
いただきました。

InvariantCultureとParseExactを調べているうちに、@ITにそのものが記載されているのを発見。
http://www.atmarkit.co.jp/fdotnet/dotnettips/203dateparse/dateparse.html
下調べが足りなかったと反省しています。

[ツリー表示へ]
タイトルRe: 文字列を日付型へ変換
記事No7629
投稿日: 2008/05/28(Wed) 17:39
投稿者魔界の仮面弁士
> InvariantCultureとParseExactを調べているうちに、@ITにそのものが記載されているのを発見。
> http://www.atmarkit.co.jp/fdotnet/dotnettips/203dateparse/dateparse.html

上記記事では Nothing を指定していますが、それは危険です。

コントロールパネルの地域オプションで、日付が「和暦」モードになっていると、
西暦3996年(平成2008年)と処理されてしまいますので、カルチャを必ず指定しましょう。

[ツリー表示へ]