【python】【GNSS】时间转换函数

#!/usr/bin/env python
# coding:utf-8
#edit by ouyangmingjun [email protected]


################################################################################
# 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      = 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__':
    

你可能感兴趣的:(GNSS,python)