'============================================================
'dcn 指定された年月日の、西暦1年1月1日からの
' 経過日を返す。
'------引数--------------------------------------------------
'y,m,d 年、月、日
'============================================================
Public Function dcn(ByVal y As Long, ByVal m As Long, _
ByVal d As Long) As Long
'うるう年の存在がやっかい
If m > 2 Then '後のコードでうるう年の29日分をまとめる
d = d - 367
Else 'その年のうるう年判定がしなくてすむ
y = y - 1
End If
'月分の補正−1月を30日としている−m \ 2 + m * 30
m = m - 1
If m And 9 Then d = d + 1
dcn = y \ 4 - y \ 100 + y \ 400 + y * 365 _
+ d + m \ 2 + m * 30 - 1
End Function
|
'============================================================
'ncd 西暦1年1月1日を0日目として、その日からの経過日h日目が
' ?年?月?日であるかを求める。
'------引数--------------------------------------------------
'h 経過日
'y,m,d 年、月、日の格納変数
'============================================================
Public Sub ncd(h As Long, y As Long, m As Long, d As Long)
'ラフな年を設定−正確な年は、この年以下である
'ラフさをなくすコードを追加するとさらに速く処理できる
y = h \ 365 + 1
'まず、yを特定する
'dcnプロシージャを使うのが効果的
Do While ((h - dcn(y, 1, 1)) < 0)
y = y - 1
Loop
d = 0
m = 13
'月日の特定、ここでもdcnプロシージャを使う
Do While (d < 1)
m = m - 1
d = h - dcn(y, m, 0)
Loop
End Sub
|
Dim cd As New CDayConvert
Dim y As Long, m As Long, d As Long
Dim sday As Long
'指定された年月日の西暦1年1月1日からの経過日
sday = cd.dcn(ある年, 月, 日)
'?日後の日付を得る
Call cd.ncd(sday + ?日後, y, m, d)
Label.Caption = y & "年" & m & "月" & d & "日です"
|
| 機種 | PC-9821V13S |
| OS | Windows95 |
| 開発ツール | Visual Basic Ver.4.0 |
| 更新日 | 00/2/10 |