2つの情報から日付を生成するには?

解決


あや  2007-08-23 06:45:42  No: 137236

VB6を利用しまして
"2007/06/03"というような日付の情報と"28"のような情報を組み合わせ
"2007/06/28"というように生成するにはどのように記述すればよろしいでしょうか?

宜しくお願いします


特攻隊長まるるう  2007-08-23 07:05:11  No: 137237

過去ログ検索『日付』でどうぞ。


あや  2007-08-23 19:01:08  No: 137238

特攻隊長まるるうさん、返信ありがとうございます。
説明が足りませんでした。一応過去ログを参照しまして
sDate1 → 2007/06/03
sDate2 → 28
と入力された内容を
sDate = CDate(Year(sDate1) & "/" & Month(sDate1) & "/" & Day(sDate2))

と記述してみたのですが、Day(sDate2)では値が27となり
sDataは"2007/06/27"となってしまいました。

もう1度過去ログを参照したいと思います。


Blue  2007-08-23 19:53:52  No: 137239

>sDate2 → 28

"2007/06/28"
ではなくて、単なる28という値?

Dim sDate2 As Date

sDate2 = 28

とすると、sDate2はどんな値を保持しているのでしょうか?
MsgBoxやローカルウィンドウで確認してみてください。

Date型ではなく、Integerとかの数値型で保持すれば、Day関数を使わないで
そのまま28という値なので、

Dim sDate As Integer
sDate = 28
sDate = CDate(Year(sDate1) & "/" & Month(sDate1) & "/" & sDate2)

でOKです。
ただ、CDateを使うよりも、DateSerial関数を使ったほうがよさそうです。


特攻隊長まるるう  2007-08-23 20:16:42  No: 137240

回答は Blue さんがやってくれてるのでより知識を深めるための内容を
補足しておきます。

データ型の構造をしっかりヘルプ(MSDN)で確認してください。
日付型の仕組みと、文字列からの変換について理解していないと、
うまくいかない例として示されたようなとんでもないコードを
書いてしまうことになります。

ヘルプより抜粋
>日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。
>西暦 100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付
つまり、内部構造は数値型と似たようなデータであり、足し算引き算
ができますが、日付との対応関係はちょっとクセがあります。
基本的に日付型の変数の制御用に用意された関数を使うのが良いでしょう。
 # DateValue, DateAdd, DateDiff, IsDate 。。。など、ヘルプを『日付』
 # というキーワードで検索すれば出てきます。
 # DateSerial が引っ掛かり難いですがw

[VB6.0]
Private Sub Command1_Click()
    Dim sDate1  As String
    Dim sDate2  As String
    Dim sDate   As String
    Dim datTemp As Date
    
    sDate1 = "2007/06/03"
    sDate2 = "28"
    
    datTemp = CDate(sDate1)
    Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
    
    datTemp = CDate(sDate2)
    Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")

    datTemp = CDate(sDate1)
    datTemp = DateSerial(Year(datTemp), Month(datTemp), CInt(sDate2))
    Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
    
    datTemp = DateSerial(1999, 3, 3) + TimeSerial(23, 59, 59)
    Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
    
    datTemp = CDate(sDate1)
    datTemp = DateAdd("d", 31, datTemp)
    Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
End Sub


あや  2007-08-24 02:26:35  No: 137241

Blueさん、特攻隊長まるるうさん

ご丁寧な返信ありがとうございました。
勉強になりました。

>Blueさん
Dim sDate2 As Date  として入力欄に入力された値(28)がどうなるか確認したところ
1900/01/27  となっていました。この日付を結合していたのですね。

DateSerialを検索・テスト後、特攻隊長まるるうさんのサンプルを実行してみました。
教えていただいたように、DateSerialを使用した方がスッキリしていますので
sDate = DateSerial(Year(sDate1), Month(sDate1), sDate2)
と記述してして利用したいと思います。

ありがとうございます!!


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




  


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