rtklib中關於結構體gtime_t
的一些記錄:
該結構體的定義:
typedef
struct
gtime_t;
其實該結構體儲存的是自2023年1月1日0時0分0秒至目標時間的秒數time
及不足整秒sec
,結構體time_t
為乙個64位的整型。下面給出乙個例子:
int
main()
輸出結果:
另外,還需記錄一下epoch2time
函式,定義如下:
extern gtime_t epoch2time
(const
double
*ep)
; gtime_t time=
;int days,sec,year=
(int
)ep[0]
,mon=
(int
)ep[1]
,day=
(int
)ep[2]
;if(year<
1970
||2099
12return time;
/* leap year if year%4==0 in 1901-2099 */
days=
(year-
1970)*
365+
(year-
1969)/
4+doy[mon-1]
+day-2+
(year%4==
0&&mon>=3?
1:0)
; sec=
(int
)floor
(ep[5]
);time.time=
(time_t)days*
86400+(
int)ep[3]
*3600+(
int)ep[4]
*60+sec;
time.sec=ep[5]
-sec;
return time;
}
著重說明一下天數的求解,
days=
(year-
1970)*
365+
(year-
1969)/
4+doy[mon-1]
+day-2+
(year%4==
0&&mon>=3?
1:0)
;
先舉乙個例子,例如我們要求2023年1月2日0時0分10秒到2023年1月1日0時0分0秒的秒數,1月2日的年積日為2,但是我們求解時肯定是1月2日之前那一天的年積日換算成秒數,然後加上1月2日經過的秒數。
那麼我們求解某一時刻a至起點所經過的秒數,所要求解的年積日就是a前一天的年積日。所以對於doy[mon-1]+day-2
就比較容易理解。例如我們要知道2.11至起點的秒數,那我們要求的年積日是2.10的,doy(2-1)+11-2=41。
對於(year%4==0&&mon>=3?1:0)
,當這一年為閏年且月份大於3時,得出的結果等於1,即閏年2月之後的某一天要加一天。
對於(year-1970)*365+(year-1969)/4
,當求解2023年(閏年)的時間時,(year%4==0&&mon>=3?1:0)
起到加一天的作用,當求解2023年的時間時,(year-1970)*365
將2023年當成365天計算了,(year-1969)/4
補充了這一天。對於其他年份也是如此。值得注意的是,time.time=(time_t)days*86400+(int)ep[3]*3600+(int)ep[4]*60+sec;
將days
進行了取整。
關於結構體
關鍵字struct表示定義的是結構體的資料型別,緊隨其後的識別符號student是結構體型別名。花括號中依次列舉該型別的每個成員資料型別及其名稱,每個成員的資料型別可以是基本資料型別或者自定義資料型別,但是不能重名。結構的成員也成為域。結構體型別的定義以乙個分號結束。由於資料型別僅是為變數分配儲存空...
關於結構體
結構不可以定義無參的建構函式,缺省內置乙個 結構只能定義有參的建構函式,通過建構函式初始所有成員變數 結構可以不使用操作符new來例項化,但是在使用該結構時必須先給所有成員初始化 結構不能繼承,也不能被繼承 結構可以實現介面 結構不能存在受保護的成員,虛成員還有抽象成員 1.結構是值型別的,不是引用...
112 RTKLIB中關於dcb檔案讀取的問題
關於rtklib讀取dcb檔案的問題,做如下幾點記錄 1 rtklib並不是只能讀取乙個dcb檔案,輸入dcb檔案路徑f test dcb就可以讀取該路徑下的所有dcb檔案 2 如果該資料夾下有很多不同日期的dcb檔案,那麼輸入f test y m.dcb就可以設定要選擇的相應時間的dcb檔案,但是...