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秒。总是闰年那块也没有写错,忘大家指导啊!

解决方案 »

  1.   


    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 FunctionPrivate 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
      

  2.   

    谢谢 可是我想计算任意时刻的GPS时间,观测时间都是从文件中读取的,比如:09 1 8 2 15 45.0 这样的格式的,怎么改代码呢?
      

  3.   

    谢谢 可是我想计算任意时刻的GPS时间,观测时间都是从文件中读取的,比如:09 1 8 2 15 45.0 这样的格式的,怎么改代码呢?
      

  4.   

    Function GetDate(pString As String) As Date
        '传入的字符串格式以空格间隔:年 月 日 时 分 秒
        Dim tmp() As String
        tmp = Split(pString)
        GetDate = DateSerial(tmp(0), tmp(1), tmp(2)) + TimeSerial(tmp(3), tmp(4), tmp(5))
    End FunctionPrivate Sub Command1_Click()
        '09 1 8 2 15 45.0
        Dim s As String
        Dim dt As Date
        
        s = "09 1 8 2 15 45.0"
        dt = GetDate(s)
        Debug.Print dt
    End Sub
      

  5.   

    孜一下,字符串中,表示年的部分是二位数,这个可能会有偏差,比如输入99到底是1999,还是2099...?所以要干涉一下:Function GetDate(pString As String, Optional pYear = 2000) As Date
        '传入的字符串格式以空格间隔:年 月 日 时 分 秒
         '默认是2000年,如果是2000年以前,就需要设pYear=1900
        Dim tmp() As String
        tmp = Split(pString)
        GetDate = DateSerial(tmp(0) + pYear, tmp(1), tmp(2)) + TimeSerial(tmp(3), tmp(4), tmp(5))
    End Function
      

  6.   

     Select Case y '月的天数
       Case y = 1
            j= j+0 End Select
    这样的语句有语法错误是错误的
    Select Case y
           case 1
             ...
           case 2
             ...
    Select Case y
    或者   Select Case y
                 case is =1
                      ....
                 case is =2
                      ....
          End Select
    属于语法错误