日付を編集するには?

解決


WON  2007-03-06 04:22:41  No: 98208

こんばんは。ActiveReportsNETで
数字8桁の日付を(20070305)をYYYY年MM月DD日
(2007年3月5日)で返すプロシージャ
をつくっているのですがどうしても、03→3月になりません。

 Private Function fYYYYMMDD2(ByVal pDATE As Long) As String

        Dim strDATE
        If pDATE = "0" Then
            fYYYYMMDD2 = ""
            Exit Function
        End If
        strDATE = CStr(pDATE)
        fYYYYMMDD2 = Left(strDATE, 4) & "年" & Format(Mid(strDATE,  5, 2), "##") & "月" & Format(Mid(strDATE, 7, 2), "##") & "日"

    End Function

どこがまずいのでしょうか?


ガッ  2007-03-06 04:39:40  No: 98209

なぜわざわざ数字ではなく数値で受け取るのか分かりませんが(数値≠数字)
私が作るなら

Private Function fYYYYMMDD2(ByVal pDATE As Long) As String
    Dim s   As String
    Dim d   As Date
    
    If pDATE = 0 Then Exit Function
    s = Right$("00000000" & CStr(Abs(pDATE)), 8)
    d = DateSerial(CInt(Mid$(s, 1, 4)), CInt(Mid$(s, 5, 2)), CInt(Mid$(s, 7, 2)))
    fYYYYMMDD2 = Format$(d, "yyyy年mm月dd日")
End Function

の様になるでしょう。

追伸
> If pDATE = "0" Then
まさしく数値と数字を混同しています


大吉末吉  2007-03-06 05:04:53  No: 98210

> どこがまずいのでしょうか?

データ型を意識していないからでは?

> Format(Mid(strDATE,  5, 2), "##") 
第一引数に「Mid(strDATE,  5, 2)」という「文字列」を指定していますが、
"#"は、「数値用の書式」ですから、第一引数は数値を(数値に変換して)指定してください。

#なお、VB2005の場合(VB.NETでどうなるかは未確認)、
#Format関数の第一引数に文字列を指定した場合の動作は、
#サポートされていないようです。


WON  2007-03-06 23:44:42  No: 98211

ありがとうございます。

理由はよくわかりました。

  すいません、もう1点だけお願いします。
Absが宣言されていませんのエラーになってしまいます。

どうするとよいのでしょうか?


大吉末吉  2007-03-07 00:36:59  No: 98212

> Absが宣言されていませんのエラーになってしまいます。
VB.NETでは「Abs関数」は組み込み関数ではなく、「Mathクラス」のメンバ(メソッド)ですから・・・「Math.Abs」なのでは?


WON  2007-03-07 02:30:53  No: 98213

ありがとうございました。
無事解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加