'============================================================ '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 |