一种计算GPS时间的程序,运行结果不对,求解。解决方案
一种计算GPS时间的程序,运行结果不对,求解。。。
GPS时规定1980.1.6.0.0.00(年月日时分秒)为GPS时原点,任意一个时刻的GPS时为与此原点的时间差。表示方法为WeekNum+Second ,即星期数加秒数。2004.5.1.10.5.15 的GPS时为:1268周554715秒。
我的程序:
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer, a As Integer, b As Integer, c As Single
x = Text1.Text
y = Text2
z = Text3
a = Text4
b = Text5
c = Text6
'另一种是最科学准确的方法,平常年份除以4,能整除(也就是没有余数)就是闰年,逢百年的时候,
'要用年份除以400,同样也是能整除的就可以判断为闰年
Dim i As Integer, j As Long, WeekNumber As Integer, k As Double, second As Double
j = 361 '距1981年的天数
For i = 1981 To x - 1 'x年1.1的总天数
If i Mod 4 = 0 And i Mod 100 <> 0 Or i Mod 400 = 0 Then
j = j + 366
Else
j = j + 365
End If
Next i
'到x年月 日的天数
If x Mod 4 = 0 And x Mod 100 <> 0 Or x Mod 400 = 0 Then '闰年记日
Select Case y '月的天数
Case y = 1
j = j + 0
Case y = 2
j = j + 31
Case y = 3
j = j + 60
Case y = 4
j = j + 91
Case y = 5
j = j + 121
Case y = 6
j = j + 152
Case y = 7
j = j + 182
Case y = 8
j = j + 213
Case y = 9
j = j + 244
Case y = 10
j = j + 274
Case y = 11
j = j + 305
Case y = 12
j = j + 335
End Select
Else
Select Case y '月的天数
Case y = 1
j = j + 0
Case y = 2
j = j + 31
Case y = 3
j = j + 59
Case y = 4
j = j + 90
Case y = 5
j = j + 120
Case y = 6
j = j + 151
Case y = 7
j = j + 181
Case y = 8
j = j + 212
Case y = 9
j = j + 243
Case y = 10
j = j + 273
Case y = 11
j = j + 304
Case y = 12
j = j + 334
End Select
End If
j = j + z - 1
WeekNumber = j \ 7
k = j Mod 7
second = CDbl(k) * 24 * 3600 + CDbl(a) * 3600 + CDbl(b) * 60 + c
Text7.Text = second
Text8.Text = WeekNumber
End Sub
我的计算结果:1251周381915秒。总是闰年那块也没有写错,忘大家指导啊!
------解决方案--------------------
GPS时规定1980.1.6.0.0.00(年月日时分秒)为GPS时原点,任意一个时刻的GPS时为与此原点的时间差。表示方法为WeekNum+Second ,即星期数加秒数。2004.5.1.10.5.15 的GPS时为:1268周554715秒。
我的程序:
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer, a As Integer, b As Integer, c As Single
x = Text1.Text
y = Text2
z = Text3
a = Text4
b = Text5
c = Text6
'另一种是最科学准确的方法,平常年份除以4,能整除(也就是没有余数)就是闰年,逢百年的时候,
'要用年份除以400,同样也是能整除的就可以判断为闰年
Dim i As Integer, j As Long, WeekNumber As Integer, k As Double, second As Double
j = 361 '距1981年的天数
For i = 1981 To x - 1 'x年1.1的总天数
If i Mod 4 = 0 And i Mod 100 <> 0 Or i Mod 400 = 0 Then
j = j + 366
Else
j = j + 365
End If
Next i
'到x年月 日的天数
If x Mod 4 = 0 And x Mod 100 <> 0 Or x Mod 400 = 0 Then '闰年记日
Select Case y '月的天数
Case y = 1
j = j + 0
Case y = 2
j = j + 31
Case y = 3
j = j + 60
Case y = 4
j = j + 91
Case y = 5
j = j + 121
Case y = 6
j = j + 152
Case y = 7
j = j + 182
Case y = 8
j = j + 213
Case y = 9
j = j + 244
Case y = 10
j = j + 274
Case y = 11
j = j + 305
Case y = 12
j = j + 335
End Select
Else
Select Case y '月的天数
Case y = 1
j = j + 0
Case y = 2
j = j + 31
Case y = 3
j = j + 59
Case y = 4
j = j + 90
Case y = 5
j = j + 120
Case y = 6
j = j + 151
Case y = 7
j = j + 181
Case y = 8
j = j + 212
Case y = 9
j = j + 243
Case y = 10
j = j + 273
Case y = 11
j = j + 304
Case y = 12
j = j + 334
End Select
End If
j = j + z - 1
WeekNumber = j \ 7
k = j Mod 7
second = CDbl(k) * 24 * 3600 + CDbl(a) * 3600 + CDbl(b) * 60 + c
Text7.Text = second
Text8.Text = WeekNumber
End Sub
我的计算结果:1251周381915秒。总是闰年那块也没有写错,忘大家指导啊!
------解决方案--------------------
- VB code
Function GetGPSDate(pDate As Date) As String Dim week As Long Dim sec As Long Const BASEDATE As Date = "1980-1-6 0:0:00" week = DateDiff("w", BASEDATE, pDate) sec = DateDiff("s", DateAdd("ww", week, BASEDATE), pDate) GetGPSDate = week & "周" & sec & "秒" End Function Private Sub Command1_Click() '2004.5.1.10.5.15 的GPS时为:1268周554715秒。 Dim dt As Date dt = "2004-5-1 10:5:15" MsgBox GetGPSDate(dt) End Sub