GNSS时间转换

news/2024/11/17 9:36:13/

算法部分

GitHub完整源程序地址

https://github.com/brucema49/GNSStime_conversion.git

代码部分:

#include <iostream>
#include<string>
#include <iomanip>
#include<math.h>
#include<stdio.h> 
using namespace std;
// 格里高利日期转换为儒略日 
double def1(double a[6])
{double s1,s2,s3,jd;s1=(int ) (1461*(a[0]+4800+(int) ((a[1]-14)/12 ))/4 );s2= (int) (367*(a[1]-2-(int) ((a[1]-14)/12 )*12)/12 );s3=(int) (3*(int)((a[0]+4900+(int) ((a[1]-14)/12) )/100 )/4 );jd= a[2]-32075+s1+s2-s3-0.5+a[3]/24+a[4]/1440+a[5]/86400;return jd; }
//儒略日转换为格里高利日期 
double *def2(double jd)
{double  j,n,l1,l2,l3,y1,m1,t,t1;
//定义静态变量,防止返回地址在函数结束时被销毁 
static    double a[6]; j=(int) (jd+0.5 ),n=(int) (4*(j+68569)/146097);l1=j+68569-(int) ((n*146097+3)/4 ), y1=(int) ((4000*(l1+1)/1461001) );l2=l1-(int) ((1461*y1/4))+31,m1=(int) (80*l2/2447 );a[2]=l2-(int) (2447*m1/80 ),l3= (int) (m1/11 );a[1]=m1+2-12*l3,a[0]=(int) (100*(n-49)+y1+l3 );t=fmod(((jd+0.5-(int) jd )*24),24 ); a[3]=(int) t;t1=fmod((t-a[3])*60,60),a[4]=(int) t1,a[5]=fmod((t1-a[1])*60,60 );return a;
}
//年+年积日+天内秒转换为儒略日 
void  def3(double a[3])
{double jd1,jd2,jd,b[6];
b[0]=a[0],b[1]=1,b[2]=1,b[3]=b[4]=b[5]=0;jd1=def1(b);jd2=a[1]+jd1-1,jd=jd2+a[2]/86400;printf("儒略日为 %lf",jd);}
//儒略日转换为年+年积日+天内秒 
void  def4(double jd)
{double *a,b[6],c1;a=def2(jd);b[0]=a[0],b[1]=b[2]=1,b[3]=b[4]=b[5]=0;c1=def1(b),a[1]=jd-c1+1,a[2]=a[3]*3600+a[4]*60+a[5];cout<<a[0]<<"年 "<<a[1]<<"年积日 "<<a[2]<<" 天内秒"; 
}//GPS周+周内秒转换为儒略日 
void def5()
{cout<<"请输入GPS周+周内秒";double a[2],jd;cin>>a[0]>>a[1];jd=2444244.5+a[0]*7+a[1]/86400;printf("儒略日为%lf",jd);
}
//儒略日转换为GPS周+周内秒 
void  def6()
{double m,jd;cout<<"请输入儒略日"<<endl;cin>>jd;int z;z=(int) ((jd-2444244.5)/7);m=( (jd-2444244.5)/7-z)*604800;cout<<z<<"周"<<m<<"周内秒"; 
}
/*根据BD周+周内秒得到的儒略日具有如下约束条件:jd对应的儒略日大于(1980,1,6,0,0,0.0)对应的儒略日,即jd≥2444244.5。
//BD周+周内秒转为儒略日 */
void  def7()
{cout<<"请输入BD周+周内秒";double a[2],jd;cin>>a[0]>>a[1];jd=2453736.5+a[0]*7+a[1]/86400; printf("儒略日为%lf",jd);
}//儒略日转为BD周+周内秒 
void  def8()
{cout<<"请输入儒略日"<<endl;double jd,m;int z;cin>>jd;
z=int((jd-2453736.5)/7);
m=((jd-2453736.5)/7-z)*604800;    
cout<<z<<"BD周"<<m<<"周内秒";
}//儒略日转换为Galileo周+周内秒 
void  def9()
{cout<<"请输入Galileo周+周内秒";double a[2],jd;cin>>a[0]>>a[1];jd=2451412.5+a[0]*7+a[1]/86400;printf("儒略日为%lf",jd);
}
//儒略日转换为Galileo周+周内秒 
void  def10()
{cout<<"请输入儒略日";
double jd,m;
int z;
cin>>jd;
z= ((jd-2451412.5)/7);
m=( (jd-2451412.50 )/7-z)*604800;
printf("%dGalileo周+%lf周内秒",z,m); 
}
/* 
Galileo周+周内秒时间标示法具有如下约束条件
周:z≥0.
周内秒(Time of Week):0≤m<604800
根据GPS周+周内秒得到的儒略日具有如下约束条件:jd对应的儒略日大于(1999,8,22,0,0,0.0)对应的儒略日,即jd≥2451412.5
*///glonasst计时转换为儒略日
void  def11()
{cout<<"请输入glonasst计时N4+Nt+h+m+s\n";double Nt,N4,a[6],Jdn,jd,h,m,s;cin>>N4>>Nt>>h>>m>>s;a[0]=1996+4*(N4-1),a[1]=a[2]=1,a[3]=a[4]=a[5]=0;Jdn=def1(a);jd=Nt-1+Jdn+h/24+m/1440+s/86400;printf("儒略日为%lf",jd);
}
//儒略日转换为glonasst 
void  def12()
{cout<<"请输入儒略日";double jd,*a,b[6],JDn,Nt,c;int h,m,s; int N4;cin>>jd;a=def2(jd);N4=(int) ((a[0]-1996)/4)+1;b[0]=1996+4*(N4-1),b[1]=b[2]=1,b[3]=b[4]=b[5]=0;JDn=def1(b);Nt=jd-JDn+1;c=Nt-(int) Nt;Nt=(int) Nt;h=(int)(c*24);m=(int)((c*24-h)*60);s=((c*24-h)*60-m)*60;cout<<"GLONASST计时为"<<"N4:"<<N4<<" Nt:"<<Nt<<" 时:"<<h<<" 分:"<<m<<" 秒:"<<s;
}int main()
{
cout<<"格里高利历日期转换为儒略日请输入1        "<<"儒略日转换成格里高利日期请输入2"<<endl;
cout<<"年+年积日+天内秒转换为儒略日请输入3      "<<"儒略日转换为年+年积日+天内秒请输入4"<<endl; 
cout<<"GPS周+周内秒转为儒略日请输入5            "<<"儒略日转换到GPS周+周内秒请输入6"<<endl;
cout<<"BD周+周内秒转为儒略日请输入7             "<<"儒略日转换到BD周+周内秒请输入8"<<endl;
cout<<"Galileo周+周内秒转为儒略日请输入9        "<<"儒略日转换到Galileo周+周内秒请输入 10"<<endl;
cout<<"GLONASST计时转换到儒略日请输入11         "<<"儒略日转换到GLONASST计时请输入12"<<endl<<"请输入选项(数字)";int i;
cin>>i;switch(i)
{ case 1:int i;cout<<"请输入格里高利日期年+月+日+时+分+秒";double a[6],jd1;for(i=0;i<6;i++){cin>>a[i];}
jd1=def1(a);
printf("儒略日日期为%lf",jd1);break;case 2:double jd;double *p;cout<<"请输入儒略日 ";cin>>jd;p= def2(jd);
cout<<"格里高利日期为"<< (int) p[0]<<"year"<<(int) p[1]<<"month"<<(int) p[2]<<"day"<<(int) p[3]<<"hour"<<(int) p[4]<<"minute"<<(int) p[5]<<"second";break;case 3:int j;double b[3];cout<<"请输入年+年积日+天内秒  "<<endl;for(j=0;j<3;j++)  cin>>b[j];def3(b);break;case 4:double jd2;cout<<"请输入儒略日  "<<endl;cin>>jd2;def4(jd2);break;case 5:def5();break;case 6:def6();break;case 7:def7();         break;    case 8:def8();break;case 9:def9();break;case 10:def10();break;case 11:def11();break;case 12 :def12();break;            
}return 0;
}

禁止一切商业转载,网络非商业转载请注明出处


http://www.ppmy.cn/news/266346.html

相关文章

传祺gac6480_传祺gs82020款,传祺GAC6480J2F5

原文标题&#xff1a;传祺gs82020款&#xff0c;传祺GAC6480J2F5 对标奥迪A6的国产汽车来了 前两年一些国产汽车的生产厂家都出了大型客车来对标奥迪A6那样的C级车&#xff0c;但销售量相对而言都并不是很理想化&#xff0c;例如众泰汽车的Z700、江准的瑞风A60&#xff0c;等车…

GSM通信

目录 一、引言 二、GSM 简介 三、GSM 的频段规划 四、GSM 的传输技术 五、GSM 技术的扩展 一、引言 上图是中国三大运营商 2G 时代到 4G 时代所用移动通信标准一览。第一次接触这类概念的人可能看不太懂这些奇怪的英文缩写&#xff0c;今天先从最经典的 GSM 开始介绍&…

ASEMI高压MOS管7N60参数,7N60封装,7N60规格

编辑-Z ASEMI高压MOS管7N60参数&#xff1a; 型号&#xff1a;7N60 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;600V 栅源电压&#xff08;VGS&#xff09;&#xff1a;30V 漏极电流&#xff08;ID&#xff09;&#xff1a;7A 功耗&#xff08;PD&#xff09;…

GSS系列(1)

关于GSS SPOJ上一个专题&#xff0c;名为Can you answer these queries&#xff0c;包含线段树&#xff0c;平衡树&#xff0c;树链剖分的练习共8道 GSS1 传送门 题目大意 你有一个序列 A [ 1 ] , A [ 2 ] , … A [ n ] A[1],A[2],…A[n] A[1],A[2],…A[n],有 m m m次询问…

GPS时间系统的转换

GPS所采用的是原子时秒长&#xff0c;起点为1980年1月6日的UTC0时。 在GPS应用中&#xff0c;时常需要采用GPS时间&#xff0c;格式为GPS周GPS周内秒&#xff0c;从RINEX格式文件中读取的时间均为 格里高利时&#xff0c;所以需要进行时间从格里高利时-儒略日-GPS时间转换的过…

GSM/GPRS+GPS模块SIM808

SIM808模块是一个完整的四波段GSM/GPRS模块&#xff0c;它结合了GPS技术进行卫星导航。将GPRS和GPS集成到LCC包中的紧凑设计将大大节省客户开发启用GPS应用程序的时间和成本。它具有行业标准的接口和GPS功能&#xff0c;允许在任何地点和任何时间通过信号覆盖对可变资产进行无缝…

GS270驱动

低电平开机 开机前 &#xff1a;poweron高电平 开机 &#xff1a;poweron 低电平开机后 &#xff1a;poweron高电平 poweron 高---低---高 1. sys_config1.fex添加字段 [2g_para] 2g_used 1 2g_name "GS270" 2g_re…

CTS/ITS/GSI

-s 指定某个设备 -m 指定某个模块 -t 指定模块中的某一项 ITS ITS&#xff1a;Android 相机图像测试套件&#xff0c;是 Android 兼容性测试套件 (CTS) 验证程序的一部分&#xff0c;其中包含用于验证图像内容的测试。 ITS&#xff1a;Android Camera Imaging Test Suite / CTS…