因为写一些程序或脚本经常要涉及GPS的时间转换,比如下载各种产品遍历的时候可能需要用年积日,但是如果日期有跨年的话年积日也不方便,可能就需要先转儒略日再转对应的年月日,而有些产品命名又是GPS周相关,所以就写了一个转换时间的代码,方便每次的调用。

代码里面每一个时间参数的变量都是一个列表的形式,数据为int或float。

cal指年月日时分秒(如果不足6位补0)

day指年月日(与cal差距在于没有时分秒信息)

doy指年积日

mjd指简化儒略日

gps指GPS周和周内秒

gpsday指GPS周和周内日

wd指星期几

比如2021年10月25日0时0分这个时刻。

cal=[2021,10,25,0,0,0]

day=[2021,10,25]

doy=298

#!/usr/bin/env python
# coding: utf-8
# author: GLASSYM
# 2020.10.25 in zhangshu
# some function about time transform
# input list ; output list (of int or float)
#import math,datetimedef cal2mjd(cal):
# cal2jd 将公历年月日时分秒转换到简化儒略日。
# 输入公历时间列表,返回儒略日if(len(cal)<6):for i in range(len(cal),6):cal.append(0)year  = cal[0]month = cal[1]day   = cal[2]+(cal[3]*3600+cal[4]*60+cal[5])/86400;y     = year+4800  m     = monthif( year < 0 ):print('Year is wrong')return Falseif( m <= 2):# 1,2月视为前一年13,14月m = m + 12y = y - 1e = math.floor(30.6 * (m+1))a = math.floor(y/100)# 教皇格雷戈里十三世于1582年2月24日以教皇训令颁布,将1582年10月5日至14抹掉。1582年10月4日过完后第二天是10月15日if( year <1582 )or(year==1582 and month<10)or(year==1582 and month==10 and day<15):b = -38else:b = math.floor((a/4) - a)c = math.floor(365.25 * y)jd = b + c + e + day - 32167.5mjd = jd - 2400000.5return mjddef mjd2cal(mjd):
# 从简化儒略日计算公历年月日时分秒
# 返回的cal是年月日时分秒 列表
# 公元1582年10月4日24:00点之前使用儒略历,公元1582年10月15日00:00点之后使用公历J = mjd + 2400000.5if (J < 1721423.5):#公元1月1日0时BC = 1;else:BC = 0;if( J < 2299160.5 ): # 1582.10.4. 24:00 前j0=math.floor(J+0.5)dd=J+0.5-j0else: #不是闰年的年数n1=math.floor((J-2342031.5)/36524.25/4)+1   #1700.3.1.0n2=math.floor((J-2378555.5)/36524.25/4)+1   #1800.3.1.0n3=math.floor((J-2415079.5)/36524.25/4)+1   #1900.3.1.0j0=n1+n2+n3+J+10dd=j0+0.5-math.floor(j0+0.5)j0=math.floor(j0+0.5)j0=j0+32083year0=math.ceil(j0/365.25)-1year=year0-4800day=j0-math.floor(year0*365.25)month=math.floor((day-0.6)/30.6)+3day=day-round((month-3)*30.6)if (month>12):month=month-12year=year+1    year=year-BCsec=round(dd*86400)    hour=math.floor(sec/3600)sec=sec-hour*3600minute=math.floor(sec/60)sec=sec-minute*60  return [year, month, day, hour, minute, sec]def cal2gps(cal):
# cal2gps 将公历GPS时间转换到GPS周和周内的秒
# 返回列表,周和周内秒mjd=cal2mjd(cal)#GPS从MJD44244开始e=mjd-44244week=math.floor(e/7)e=e-week*7            return [week,round(e*86400)]def gps2cal(gpst):
# gps2cal  将GPS周和周内的秒转换到公历年月日
# 返回列表 年月日时分秒
# GPS从MJD44244开始mjd = 44244+(gpst[0]*86400*7+gpst[1])/86400cal = mjd2cal(mjd)return caldef gpsday2cal(gpst):
# gps2cal  将GPS周和周内日转换到公历GPS时间
# 返回列表 年月日时分秒
# GPS从MJD44244开始mjd = 44244+(gpst[0]*7+gpst[1])cal = mjd2cal(mjd)return caldef cal2gpsday(cal):
# cal2gpsday 将年月日转化为GPS周及周内日
# 返回列表,周和周内日mjd=cal2mjd(cal)#GPS从MJD44244开始e=mjd-44244week=math.floor(e/7)e=e-week*7            return [week,int(e)]def cal2wd(cal):
# 将公历年月日转换到星期几
# cal2wd1(cal) 返回星期几
# cal:1x3矩阵,3列分别为年月日
# 在公元1582年10月4日24:00点之前使用儒略历,公元1582年10月15日00:00点之后使用公历Y=cal[0]M=cal[1]D=cal[2]#一月、二月当作前一年的十三、十四月if ((M==1)or(M==2)):M=M+12Y=Y-1#判断是否在1582年10月5日前if ((Y<1582)or((Y==1582)and(M<10))or((Y==1582)and(M==10)and(D<5))): A=(D+2*M+math.floor((3*(M+1))/5)+Y+math.floor(Y/4)+5)%7#1582年10月5日前的公式else:A=(D+2*M+math.floor((3*(M+1))/5)+Y+math.floor(Y/4)-math.floor(Y/100)+math.floor(Y/400))%7#1582年10月5日后的公式return A+1def doy2day(doy):
# 年积日转年月日
# 根据输入的年份和天数计算对应的日期first_day=datetime.datetime(doy[0],1,1)add_day=datetime.timedelta(days=doy[1]-1)date = datetime.datetime.strftime(first_day+add_day,'%Y,%m,%d')date = date.split(',')date = [ int(x) for x in date ]return datedef day2doy(date):
# 年月日转年积日
# 输入列表 年月日 返回该日是年内第几日year = date[0]month= date[1]day  = date[2]months=[0,31,59,90,120,151,181,212,243,273,304,334]if 0<month<=12:sum=months[month-1]else:print("month error")sum+=dayleap=0# 接下来判断平年闰年# and的优先级大于or# 1、世纪闰年:能被400整除的为世纪闰年# 2、普通闰年:能被4整除但不能被100整除的年份为普通闰年if(year%400==0) or ((year%4)==0) and (year%100!=0):leap=1#判断输入年的如果是闰年,且输入的月大于2月,则该年总天数加1if(leap==1) and (month>2):sum+=1return sum

使用方法示例:

import TimeTrans as TTtime = [2021,10,25]
print(TT.day2doy(time))#输出:298

GPS涉及到的各种时间转换(年月日,年积日,儒略日,GPS周及周内日或周内秒,星期几)python相关推荐

  1. GPS秒转北京时间(年月日时分秒)+ gps 周、周内秒转gps时间戳(单位秒) C++ 代码

    目录 一.GPS秒转北京时间(年月日时分秒)- 代码如下: 二.gps

  2. sql编写将时间转换年月日 时分格式

    SELECT SUBSTRING(CONVERT(varchar(100),时间字段, 22),0,15) AS aa  FROM  表名 转载于:https://www.cnblogs.com/lq ...

  3. python版本的GNSS时间转换:公历与儒略日的互相转换,以及儒略日转为GPST。

    python版本的GNSS时间转化: 我自己定义了一个convert_time()类,可以通过类的调用实现时间转化,类似一个模块吧. class convert_time(): def __init_ ...

  4. 【常用小知识】python time模块 当前时间 ---转换--> 年月日时分秒

    当前时间 -转换–> 年月日时分秒 import time# 定义一个转换函数,入参为当前时间time.time() def time_s_date(ts):dt = time.strftime ...

  5. matlab 年积日与年月日转换,空间大地测量与GPS导航定位时间系统相互转换,格里高利时通用时儒略日,GPS时,年积日相互转换的源代码程序...

    空间大地测量与GPS导航定位所需时间系统的相互转换(包括格里高利时(通用时),儒略日,GPS时,年积日,各个时间系统的表示及其相互之间的转换,文章末尾并附上各个时间系统相互转换的源代码程序) 进行空间 ...

  6. Js获取年月日及时间转换

    Js获取年月日及时间转换 1.获取年.月.日和将时间戳转换成日期格式 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 下面是获取时间日期的方法, ...

  7. php整么去掉时间的年月日,php强大的时间转换函数strtotime

    php强大的时间转换函数strtotime 在php中strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳,这个函数也是我们经常会用到的`,有需要的朋友参考一下. 使用st ...

  8. (js时间转换)北京时间转年月日--moment.js,获取当前时间

    1.moment.js的使用,北京时间UTC转化正常年月日– ```javascript // 时间格式化formatTime() {var moment = require("moment ...

  9. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算

    时间互转代码片段: * 时间戳 转 时间 * * @param beginDate * @return * @see [类.类#方法.类#成员] */ public static String tim ...

最新文章

  1. C语言register关键字—最快的关键字
  2. python判断字符是否是字典的键_Python3基础 dict in/not in 查询一个字符是否指定字典的键或者值...
  3. ATO,MTO和ETO
  4. vmware-images
  5. Docker 上安装、启动 MySQL (图解)
  6. android 信鸽 自动重启,Android简单集成信鸽推送
  7. Vijos 1334 ---- NASA的食物计划(01背包强化)
  8. make clean与make distclean的区别-转
  9. opencv 利用图像轮廓函数填充圆环内部 图像轮廓函数应用小例子
  10. [Python] os.path.splitext(path):分离文件名与扩展名
  11. 各种水龙头拆卸图解_扭力扳手使用方法图解与注意事项、原理、种类
  12. 如何用一个废旧的笔记本打造一个家庭网络服务器?
  13. qt TCP 网络编程
  14. T3及报税软件报表使用无线打印机打印凭证没反应
  15. You tube music
  16. app做好后如何上线_自己做的app从做好到上架需要什么手续或过程?
  17. OAUS自动升级系统
  18. 新手入门,想用VB给班上写一个自动播放上下课铃声的程序,求教
  19. 性能测试监控指标和分析
  20. 使用Python修改可执行文件-EXE的图标

热门文章

  1. 次更新不适用您的计算机,Windows系统安装补丁时提示“此更新不适用于你的计算机”的解决方案!...
  2. 标签平滑正则化(LSR)
  3. 完美解决“未能装载Office文档控件。请使用Internet Explorer(6.0+)浏览器并检查浏览器的安全设置。”的方案
  4. 时间--cd //lastyear
  5. 乐高计算机游戏泡泡龙的目标,乐高游戏教案
  6. 最新CCF会议|2022-2023顶会会议时间+投稿时间+官网链接(视觉+多媒体+数据挖掘+数据库+通用人工智能)
  7. opencv 训练样本
  8. 计算机cpu最高温度,详解电脑cpu温度过高几种常用处理方法
  9. rust怎么拆除墙壁指令_腐蚀有什么指令?基本指令及服务器指令汇总
  10. 第3章第13节:如何快速生成一份漂亮的相册 [PowerPoint精美幻灯片实战教程]