精华内容
下载资源
问答
  • 文章目录时间标准闰秒TAI、GPST、UTC换算时区划分UTC时间转本地时间(东八区)本地时间(东八区)转UTCGPS时间转UTC时间UTC时间转GPS时间 时间标准 格林尼治标准时间GMT(Greenwich Mean Time):它是指位于英国...

    内容转载自我的博客

    时间标准

    • 格林尼治标准时间GMT(Greenwich Mean Time):它是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。自1924年2月5日开始,格林尼治天文台负责每隔一小时向全世界发放调时信息。格林尼治标准时间的正午是指当平太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治平时基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代
    • 世界时UT(Universal Time):它是一种以格林威治子夜起算的平太阳时。世界时是以地球自转为基准得到的时间尺度,其精度受到地球自转不均匀变化和极移的影响,为了解决这种影响,1955年国际天文联合会定义了UT0、UT1和UT2三个系统:UTO表示未经改正的世界时,UT1表示经过极移改正的世界时,UT2表示进一步经过地球自转速度的季节性改正后的世界时
    • 国际原子时TAI(International Atomic Time):英语简称为IAT,法语简称为TAI,最终使用法语简称TAI。它是根据秒的定义(1秒为铯-133原子基态两个超精细能级间跃迁辐射振荡9192631770周所持续的时间)的一种国际参照时标,是均匀的时间尺度,与地球的空间位置不关联,起点为1958年1月1日0时0分0秒。随着时间的迁延,TAI和UT1两种时间尺度的时间差越来越大。为此,在UT1和TAI之间进行协调,这就产生了协调世界时UTC
    • 协调世界时UTC(Coordinated Universal Time):它是最主要的世界时间标准,基于国际原子时,并通过不规则的加入闰秒来抵消地球自转变慢的影响。它又称为世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。协调世界时(UTC)是世界上调节时钟和时间的主要时间标准,是最接近格林威治标准时间(GMT)的几个替代时间系统之一。对于大多数用途来说,UTC时间被认为能与GMT时间互换。人们对该时间系统进行过数次调整,直到1972年引入了闰秒机制,调整工作得以简化。闰秒在必要的时候会被插入到UTC中,以保证协调世界时(UTC)与世界时(UT1)相差不超过0.9秒
    • Unix或POSIX时间戳:它是UNIX或类UNIX系统使用的时间表示方式。一般定义为从协调世界时(UTC时间)1970年1月1日0时0分0秒起至现在的总秒数(10位是精确到秒,13位是精确到毫秒)。考虑到闰秒的话,更精确的定义为从协调世界时(UTC时间)1970年1月1日0时0分0秒起至现在经过闰秒调整之后的总秒数
    • GPS时间:它是GPS原子时,它的时间基准是1980年1月6日0时0分0秒与世界协调时刻UTC相一致,以后按原子时TAI秒长累积计时。GPS时间跟UTC时间之差为秒的整倍数(因为UTC比TAI慢,而GPS是按照TAI来计时的,所以UTC也比TAI慢)。如1989年为5秒,1996年为11秒,2002年为13秒,到现在2020年08月为止为18秒。

    闰秒

    它是在协调世界时(UTC)中增加或减少一秒,使它与平太阳时贴近所做调整。需要闰秒的部分原因是因为平均太阳日(mean solar day)的长度正以非常缓慢的速度增加中,另一个原因是原子钟赋予秒固定的时间长度。而当两者结合时,就已经比当时的太阳时的秒短少了一点点。时间现在是以稳定的原子钟来测量(TAI或国际原子时),因为地球自转有着许多的变数,所以以前的秒定义(地球绕着轴自转和绕太阳的公转,以平均太阳日的1/86400来定义)被废除。当要增加正闰秒时,这一秒是增加在第二天的00:00:00之前,效果是延缓UTC第二天的开始。当天23:59:59的下一秒被记为23:59:60,然后才是第二天的00:00:00。如果是负闰秒的话,23:59:58的下一秒就是第二天的00:00:00了,但目前还没有负闰秒调整的需求
    Leap_Second.dat可以查看每次闰秒的时间和第几次闰秒,主要内容如下:

    #    MJD        Date        TAI-UTC (s)
    #           day month year
    #    ---    --------------   ------   
    #
        41317.0    1  1 1972       10
        41499.0    1  7 1972       11
        41683.0    1  1 1973       12
        42048.0    1  1 1974       13
        42413.0    1  1 1975       14
        42778.0    1  1 1976       15
        43144.0    1  1 1977       16
        43509.0    1  1 1978       17
        43874.0    1  1 1979       18
        44239.0    1  1 1980       19
        44786.0    1  7 1981       20
        45151.0    1  7 1982       21
        45516.0    1  7 1983       22
        46247.0    1  7 1985       23
        47161.0    1  1 1988       24
        47892.0    1  1 1990       25
        48257.0    1  1 1991       26
        48804.0    1  7 1992       27
        49169.0    1  7 1993       28
        49534.0    1  7 1994       29
        50083.0    1  1 1996       30
        50630.0    1  7 1997       31
        51179.0    1  1 1999       32
        53736.0    1  1 2006       33
        54832.0    1  1 2009       34
        56109.0    1  7 2012       35
        57204.0    1  7 2015       36
        57754.0    1  1 2017       37
    

    TAI、GPST、UTC换算

    根据文件Leap_Second.dat可以得知,截止2020年08月:
    TAI = UTC + 37
    由于GPST从1980年1月6日0时0分0秒开始计时,所以1980年1月1日及以前的闰秒不考虑,则:
    GPST = UTC + 18
    另外,leapsecond可以查看实时的UTC、GPST、TAI时间

    时区划分

    时区是指地球上的某一个区域使用同一个时间定义。GMT时间或者UT时间,都是表示地球自转速率的一种形式。从太阳升起到太阳落下,时刻从0到24变化。这样,不同经度的地方时间自然会不相同。为了解决这个问题,人们把地球按经度划分为不同的区域,每个区域内使用同一个时间定义,相邻的区域时间差为1个小时。时区又分为理论时区和法定时区

    • 理论时区:按经度,每15°为一个时区,将地球划分为24个时区,以本初子午线为中心,向东西两侧各延伸7.5°的区域为0时区
    • 法定时区:法定时区是在理论时区的基础上,根据某些地区的国界线做了调整之后的时区。为实际使用的时区。例如中国横跨东五区到东九区五个时区,但统一使用东八区时间(北京时间)
    • 时差:某个地方的时刻与0时区的时刻差称为时差,时差东正西负。以本初子午线为中心,每向东一跨过一个时区,时刻增加一个小时,每向西跨过一个时区,时刻减少一个小时
    • 国际日期变更线:大体以180度经线为日界线。当自西向东穿过日期变更线时,日期需要减少一天,反之,日期增加一天

    UTC时间转本地时间(东八区)

    根据此代码,修改最后一行fromtimestamp(timestamp, timezone(timedelta(hours=8)))即可实现UTC转不同时区

    from datetime import datetime, timedelta, timezone
    
    # UTC时间转本地时间(北京)时间
    # 1. 把utc的str转为datetime(无时区信息)
    # 2. 添加时区信息为utc时区
    # 3. datetime转为时间戳
    # 4. 从时间戳得到本地时间datetime
    # 输入格式为:'2020-08-05 02:03:03.815650'
    # 输出格式为:datetime.datetime(2020, 8, 5, 10, 3, 3, 815650)
    def utc_to_local(utc_time):
        datetimeformat = "%Y-%m-%d %H:%M:%S.%f"
        # 得到不包含时区的datetime
        dt_no_tz = datetime.strptime(utc_time, datetimeformat)
        # 设置时区为UTC
        # timezone.utc与timezone(timedelta(hours=0))一样
        utc_datetime = dt_no_tz.replace(tzinfo=timezone(timedelta(hours=0)))
        t = utc_datetime.timestamp()
        # 根据时间戳得到UTC时间
        # datetime.utcfromtimestamp(t)
        # 如果要将时间戳转化为东八区datetime
        # fromtimestamp(timestamp, timezone(timedelta(hours=8)))
        # 根据时间戳得到本地时间fromtimestamp(t, tz=None)
        return datetime.fromtimestamp(t)
    

    本地时间(东八区)转UTC

    根据此代码,修改replace(tzinfo=timezone(timedelta(hours=8)))即可实现某个时区转UTC时间

    from datetime import datetime, timedelta, timezone
    
    # 本地时间转UTC时间
    # 输入格式为:'2020-08-05 10:03:03.815650'
    # 输出格式为:datetime.datetime(2020, 8, 5, 2, 3, 3, 815650)
    def local_to_utc(local_time):
        datetimeformat = "%Y-%m-%d %H:%M:%S.%f"
        # 得到不包含时区的datetime
        dt_no_tz = datetime.strptime(local_time, datetimeformat)
        # 设置时区为本地时区(北京,东八区)
        # timezone.utc与timezone(timedelta(hours=0))一样
        local_datetime = dt_no_tz.replace(tzinfo=timezone(timedelta(hours=8)))
        t = local_datetime.timestamp()
        # 根据时间戳得到UTC时间
        return datetime.utcfromtimestamp(t)
    

    GPS时间转UTC时间

    将GPS时间转换为UTC时间

    from datetime import datetime, timedelta
    
    # 闰秒
    LEAP_SECONDS = 18
    
    # 输入:GPS周、GPS周内秒、闰秒(可选,gps时间不同,闰秒值也不同,由Leap_Second.dat文件决定)
    # 输出:UTC时间(格林尼治时间)
    # 输入示例: gps_week_seconds_to_utc(2119, 214365.000)
    # 输出示例: '2020-08-18 11:32:27.000000'
    def gps_week_seconds_to_utc(gpsweek, gpsseconds, leapseconds=LEAP_SECONDS):
        datetimeformat = "%Y-%m-%d %H:%M:%S.%f"
        epoch = datetime.strptime("1980-01-06 00:00:00.000", datetimeformat)
        # timedelta函数会处理seconds为负数的情况
        elapsed = timedelta(days=(gpsweek*7), seconds=(gpsseconds-leapseconds))
        return datetime.strftime(epoch+elapsed, datetimeformat)
    

    UTC时间转GPS时间

    将UTC时间转换为GPS时间

    from datetime import datetime, timedelta
    
    # 闰秒
    LEAP_SECONDS = 18
    
    # 输入:UTC时间(datetime类型)
    # 输出:GPS周、周内日、周内秒、毫秒
    def utc_to_gps_week_seconds(utc, leapseconds=LEAP_SECONDS):
        datetimeformat = "%Y-%m-%d %H:%M:%S.%f"
        epoch = datetime.strptime("1980-01-06 00:00:00.000", datetimeformat)
        tdiff = utc - epoch + timedelta(seconds=leapseconds)
        gpsweek = tdiff.days // 7
        gpsdays = tdiff.days - 7*gpsweek
        gpsseconds = tdiff.seconds + 86400*(tdiff.days -7*gpsweek)
        return gpsweek, gpsdays, gpsseconds, tdiff.microseconds
    
    展开全文
  • GPS UTC 时间转换

    2018-04-20 11:27:03
    GPS时间UTC时间的相互转换工具,可用于将GPS时间转换为UTC时间,也可以用于UTC时间转换为GPS时间
  • 深夜不眠,和大家分享自己刚写出来的GPS获得的UTC时间转换为北京时间,还有星期转换函数,在0.96寸oled显示//月修正数据表unsigned char const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};//获得现在是星期几//功能...

    深夜不眠,和大家分享自己刚写出来的GPS获得的UTC时间转换为北京时间,还有星期转换函数,在0.96寸oled显示

    //月修正数据表

    unsigned char const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};

    //获得现在是星期几

    //功能描述:输入公历日期得到星期(只允许1901-2099年)

    //year,month,day:公历年月日

    //返回值:星期号

    unsigned char GPS_Get_Week(unsigned int year,unsigned char month,unsigned char day)

    {

    unsigned int temp2;

    unsigned char yearH,yearL;

    yearH=year/100;        yearL=year%100;

    // 如果为21世纪,年份数加100

    if (yearH>19)yearL+=100;

    // 所过闰年数只算1900年之后的

    temp2=yearL+yearL/4;

    temp2=temp2%7;

    temp2=temp2+day+table_week[month-1];

    if (yearL%4==0&&month<3)temp2--;

    return(temp2%7);

    }

    //星期几显示

    void Week_Show(unsigned int year,unsigned char month,unsigned char day)

    {

    unsigned char week;

    week = GPS_Get_Week(year,month,day);

    switch(week)

    {

    case 1:

    OLED_Show_Chinese(112,16,one_font,1,16,1);//显示汉字“一”

    break;

    case 2:

    OLED_Show_Chinese(112,16,two_font,1,16,1);//显示汉字“二”

    break;

    case 3:

    OLED_Show_Chinese(112,16,three_font,1,16,1);//显示汉字“三”

    break;

    case 4:

    OLED_Show_Chinese(112,16,four_font,1,16,1);//显示汉字“四”

    break;

    case 5:

    OLED_Show_Chinese(112,16,five_font,1,16,1);//显示汉字“五”

    break;

    case 6:

    OLED_Show_Chinese(112,16,six_font,1,16,1);//显示汉字“六”

    break;

    case 7:

    OLED_Show_Chinese(112,16,seven_font,1,16,1);//显示汉字“日”

    break;

    default:

    break;

    }

    OLED_Show_Chinese(80,16,week_font,2,16,1);//显示汉字“日”

    }

    //UTC时间转换为北京时间

    void UTCToBeijing(unsigned int year,unsigned char month,unsigned char day,unsigned int hour,unsigned char minute,unsigned char second)

    {

    hour += 8;

    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//1,3,5,7,8,9,12月每月为31天

    {

    if(hour >= 24)

    {

    hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天

    if(day > 31){day -= 31;month += 1;}//如果超过31一天,减去31天,后加上一个月

    }

    }

    else if(month==4||month==6||month==9||month==11)//4,6,9,11月每月为30天

    {

    if(hour >= 24)

    {

    hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天

    if(day > 30){day -= 30;month += 1;}//如果超过30一天,减去30天,后加上一个月

    }

    }

    else//剩下为2月,闰年为29天,平年为28天

    {

    if(hour >= 24)

    {

    hour -= 24;day += 1;

    if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//判断是否为闰年,年号能被400整除或年号能被4整除,而不能被100整除为闰年

    {if(day > 29){day -= 29;month += 1;}}//为闰年

    else{if(day > 28){day -= 28;month += 1;}}//为平年

    }

    }

    sprintf((char *)date_dtbuf,"%04d",year);

    OLED_ShowString(8,0,date_dtbuf,16,1);

    sprintf((char *)date_dtbuf,"%02d",month);

    OLED_ShowString(56,0,date_dtbuf,16,1);

    sprintf((char *)date_dtbuf,"%02d",day);

    OLED_ShowString(88,0,date_dtbuf,16,1);

    OLED_Show_Chinese(40,0,year_font,1,16,1);//显示汉字“年”

    OLED_Show_Chinese(72,0,month_font,1,16,1);//显示汉字“月”

    OLED_Show_Chinese(104,0,day_font,1,16,1);//显示汉字“日”

    sprintf((char *)time_dtbuf,"%02d:%02d:%02d",hour,minute,second);

    OLED_ShowString(0,16,time_dtbuf,16,1);

    Week_Show(year,month,day);//星期显示

    OLED_Refresh_Gram();

    }

    展开全文
  • 源: 将GPS获得的UTC时间转换成本地时间的方法 参考: gps时转换为utc时间方法 转载于:https://www.cnblogs.com/LittleTiger/p/10551034.html

    源:

    将GPS获得的UTC时间转换成本地时间的方法

    参考:

    gps时转换为utc时间方法

     

    转载于:https://www.cnblogs.com/LittleTiger/p/10551034.html

    展开全文
  • GPS UTC时间转换函数

    热门讨论 2013-04-08 21:26:54
    GPS UTC与北京时间的转换函数,方便使用。
  • GPS时间UTC时间的区别,

    万次阅读 2017-12-01 20:10:28
    原子时(GPS时间):精确时间,世界时(UTC):随着地球的运转会有误差。 因为世界时(即UTC时间),有误差,所以需要通过原子时,在误差每相差一秒的时候才会进行校准,即为跳闰秒,UTC时间+1 或者-1秒。 UTC时间...

    结论:

    原子时(GPS时间):精确时间,世界时(UTC):随着地球的运转会有误差。

     因为世界时(即UTC时间),有误差,所以需要通过原子时,在误差每相差一秒的时候才会进行校准,即为跳闰秒,UTC时间+1 或者-1秒。

    UTC时间,本身是没有时区信息的,通过计算得出的时间是美国的时间,需要再加减时区的差值,才是本地时间

    我们获得的UTC时间转成可读的格式后,需要加8个小时才能变成中国的时间,一般正常的程序中已经自动做过时区的处理了,所以不需要刻意加8个小时。

    所有存在的时间系统全部由两部分组成:一部分是时间基准,或者叫时间原点,即起始时间,另一部分是时间尺度,即时间单位。

    1、我们通常生活的所用的时间都是UTC时间,即世界协调时。它起源于世界时,世界时系统是以地球自转运动为基准的时间系统。也就是我们根据地球自转,公转确定的24小时,一年365天,然后再细分到秒。而世界协调时的秒不是世界时的秒,而是采用了原子时的秒(国际单位制的秒)。原因是世界时受地球自转的影响比较大,地球还受到其他因素的影响,比如极移,岁差等因素的影响。总之,世界时(跟地球有关的时间系统)并不是严格均匀的时间系统,世界协调时是为了调节人们生活的时间和GPS原子时之间的差异而发明的一种时间系统。
    2、GPS时间,也就是GPS原子时,它的时间基准是1980年1月6日0点与世界协调时刻相一致,以后按原子时秒长累积计时。GPS时间跟UTC时间之差为秒的整倍数。如1989年为5秒,1996年为11秒,2002年为13秒。到现在为止为15秒左右。
    也就是说,时间基准,两套时间系统从1980年1月6日 开始一样,但是因为两个时间系统的秒长不一样,也就是我们所说的时间尺度不一样,最终随着时间的累积,两者之间就会差。而世界协调时为了协调人们生活中的时间,就采用了跳秒的办法来处理这种差异。

    http://leapsecond.com/java/gpsclock.htm

    展开全文
  • 通过GPS模块可以得到UTC时间,但如何将UTC时间转换成你所在地的本地时间呢?下面介绍一种自己曾经使用过并得到过验证的计算方法: 前提:已知UTC时间,经纬度 一、首先通过经纬度来计算出所在地时区 // 计算...
  • 利用C#编写的GPS时间UTC时间相互转换,以及WGS84坐标系下与北京54坐标系下的坐标转换 可视化效果好 易操作
  • bds/gpsutc时间

    2017-11-25 17:24:43
    pyqt开发的简单界面,支持bds/gpsutc时间,显示北京时间,闰秒可设置。
  • 从某一基准时间算起的秒时间,转换为年月日时分秒(YYYY/MM/DD HH/MM/SS)形式。也有人称为GPS时间转UTC时间。matlab代码
  • GPS UTC与北京时间的转换函数

    热门讨论 2013-07-05 17:10:40
    GPS UTC与北京时间的转换函数,很好用!给大家分享!
  • GPS星历解调和UTC时间转换的算法与实现.nh
  • % Table of time scales 1972-present, and some predictions % TT = TAI+32.184s ==> UT1-UTC = TAI-UTC - (TT-UT1) + 32.184s % Starting at TAI-UTC GPS-UTC TT-UT1 UT1-UTC % % 1972-01-01 ...
  • android_GPS UTC 时间到系统时间

    千次阅读 2015-09-13 17:18:09
    GPS时间UTC时间,是从1970年1月1日开始的ms时间。 如果要转换成当前时间为: import java.text.SimpleDateFormat; import java.util.Calendar; Calendar calendar = Calendar.getInstance();  ...
  • 需求说明:北斗周-周内秒转化为日历时,转化为UTC时,转化为GPS周周内秒 GPS周-周内秒转化为日历时,转化为UTC时,转化为北斗周-周内秒 设计示意图: 源代码: using System; using System.Collections....
  • 我碰到的问题,GPS上UTC时间转北京时间和STM32上UNIX时间戳转北京时间。这部分之前讲RTC和GPS的时候有涉及到一部分。具体的RTC如何得到UNIX时间戳,和GNRMC如何解析得到UTC时间可以参看一下。参看:STM32开发 – RTC...
  • GPSUTC和本地时间的显示器

    千次阅读 2017-10-22 18:43:37
    GPSUTC和本地时间的显示器 GitHub仓库:https://github.com/XinLiGitHub/GpsUtcAndLocalTime PS:博文不再更新,后续更新会在GitHub仓库进行。  GPSUTC和本地时间的显示器。程序中涉及到朱利安日期的转换,...
  • 本函数可将utc时间转换为gps时间,但本程序并没有考虑因gps周跳所造成的与utc的时间差 输入参数: time=[year,month,day,hour,minute,second] 输出参数: gpsweeknum:gps周数(未计算gps跳秒) gpsweeksec:gps时...
  • Update (June 2017): Currently 18 leap seconds.GPS time is simply UTC time, but without leap seconds. As of this writing, there have been 15 leap seconds since the GPS epoch (January 6, 1980 @ 00:00:00...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

gps时间转utc时间