-
Notifications
You must be signed in to change notification settings - Fork 0
/
Time Convert.py
164 lines (128 loc) · 5.09 KB
/
Time Convert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 26 08:50:27 2021
@author: ROINT
"""
################################################################################
# Import Python modules
import datetime
################################################################################
# FUNCTION:
################################################################################
def date_diff_seconds(date):
date_1970jan1 = datetime.datetime(1970, 1, 1, 0, 0, 0)
time_delta = date - date_1970jan1
return time_delta.days * 24 * 3600 + time_delta.seconds
################################################################################
# FUNCTION: to convert 2-digit year to 4-digit year
#转换两位数的年到4位数的年
################################################################################
def yy2yyyy(yy):
if yy >= 1900:
yyyy = yy
elif yy > 50 and yy < 1900:
yyyy = yy + 1900
elif yy <= 50:
yyyy = yy + 2000
return yyyy
################################################################################
# FUNCTION: to convert year, day of year to GPS week, day of week
#转换年,年积日到GPS周,周内天
################################################################################
def yrdoy2gpst(year, doy):
year0 = yy2yyyy(year)
date_1980jan6 = datetime.datetime(1980, 1, 6, 0, 0, 0)
date = datetime.datetime(year0, 1, 1, 0, 0, 0)
time_delta = date - date_1980jan6
days_delta = time_delta.days + doy - 1
gps_week = int(days_delta / 7)
gps_dow = days_delta - gps_week * 7
return gps_week, gps_dow
################################################################################
# FUNCTION: to convert year, day of year to GPS week, day of week
################################################################################
def gpst2yrdoy(gps_week, gps_sow):
mjd = gpst2mjd(gps_week, gps_sow)
year, doy = mjd2yrdoy(mjd)
return year, doy
################################################################################
# FUNCTION: to convert year, day of year to month, day
################################################################################
def yrdoy2ymd(year,doy):
year0 = yy2yyyy(year)
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31]
if ((year0 % 4 == 0) and ((year0 % 100 != 0) or (year0 % 400 == 0))):
days_in_month[1] = 29
id0 = doy
for imonth in range(0,12):
id0 = id0 - days_in_month[imonth]
if (id0 > 0):
continue
iday = id0 + days_in_month[imonth]
break
imonth += 1
return imonth, iday
################################################################################
# FUNCTION: to convert GPS week, seconds of week to modified Julian date (MJD)
################################################################################
def gpst2mjd(gps_week, gps_sow):
mjd = gps_week * 7 + 44244 + gps_sow / 86400
return mjd
################################################################################
# FUNCTION: to convert year, month, day or year, day of year to modified Julian date (MJD)
################################################################################
def ymd2mjd(year, month, day):
doy_of_month = [0,31,59,90,120,151,181,212,243,273,304,334]
year0 = yy2yyyy(year)
# check the input data
if (year0 < 0 or month < 0 or month > 12 or day > 366) or (month != 0 and day > 31):
print (' *** ERROR (ymd2mjd): Incorrect date (year,month,day): ', year0, month, day)
return
# doy to month, day
if month == 0:
im, id0 = yrdoy2ymd(year0,day)
else:
im = month
id0 = day
year1 = year0
if im <= 2:
year1 = year1 - 1
mjd = 365 * year0 - 678941 + int(year1 / 4) - int(year1 / 100) + int(year1 / 400) + id0
im = im - 1
if im != -1:
mjd = mjd + doy_of_month[im]
return mjd
################################################################################
# FUNCTION: to convert modified Julian date (MJD) to year, day of year
################################################################################
def mjd2yrdoy(mjd):
year = int((mjd + 678940) / 365)
doy = mjd - ymd2mjd(year,1,1)
while doy <= 0:
year = year - 1
doy = mjd - ymd2mjd(year,1,1) + 1
return year, doy
################################################################################
# FUNCTION: to get the week day
################################################################################
def weekd_str(year, month, day):
weekds = datetime.datetime(year,month,day).strftime("%w")
weekd = int(weekds)
if weekd == 0:
weekd_str = 'Sunday'
elif weekd == 1:
weekd_str = 'Monday'
elif weekd == 2:
weekd_str = 'Tuesday'
elif weekd == 3:
weekd_str = 'Wednesday'
elif weekd == 4:
weekd_str = 'Thursday'
elif weekd == 5:
weekd_str = 'Friday'
elif weekd == 6:
weekd_str = 'Saturday'
return weekd_str
if __name__ == '__main__':
print("this is a gnss time convert test!\n")
pass