搜档网
当前位置:搜档网 › 日出日落时间计算程序(C语言)

日出日落时间计算程序(C语言)

日出日落时间计算程序(C语言)
日出日落时间计算程序(C语言)

//日出日落时间计算C语言程序

#define PI 3.1415926

#include

#include

using namespace std;

int days_of_month_1[]={31,28,31,30,31,30,31,31,30,31,30,31};

int days_of_month_2[]={31,29,31,30,31,30,31,31,30,31,30,31};

long double h=-0.833;

//定义全局变量

void input_date(int c[]){

int i;

cout<<"Enter the date (form: 2009 03 10):"<

for(i=0;i<3;i++){

cin>>c[i];

}

}

//输入日期

void input_glat(int c[]){

int i;

cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°40′40″)):"<

for(i=0;i<3;i++){

cin>>c[i];

}

}

//输入纬度

void input_glong(int c[]){

int i;

cout<<"Enter the degree of longitude(west is negativ,form: 40 40 40 (means 40°40′40″)):"<

for(i=0;i<3;i++){

cin>>c[i];

}

}

//输入经度

int leap_year(int year){

if(((year%400==0) || (year%100!=0) && (year%4==0))) return 1;

else return 0;

}

//判断是否为闰年:若为闰年,返回1;若非闰年,返回0

int days(int year, int month, int date){

int i,a=0;

for(i=2000;i

if(leap_year(i)) a=a+366;

else a=a+365;

}

if(leap_year(year)){

for(i=0;i

a=a+days_of_month_2[i];

}

}

else {

for(i=0;i

a=a+days_of_month_1[i];

}

}

a=a+date;

return a;

}

//求从格林威治时间公元2000年1月1日到计算日天数days long double t_century(int days, long double UTo){

return ((long double)days+UTo/360)/36525;

}

//求格林威治时间公元2000年1月1日到计算日的世纪数t

long double L_sun(long double t_century){

return (280.460+36000.770*t_century);

}

//求太阳的平黄径

long double G_sun(long double t_century){

return (357.528+35999.050*t_century);

}

//求太阳的平近点角

long double ecliptic_longitude(long double L_sun,long double G_sun){ return (L_sun+1.915*sin(G_sun*PI/180)+0.02*sin(2*G_sun*PI/180));

}

//求黄道经度

long double earth_tilt(long double t_century){

return (23.4393-0.0130*t_century);

}

//求地球倾角

long double sun_deviation(long double earth_tilt, long double ecliptic_longitude){ return (180/PI*asin(sin(PI/180*earth_tilt)*sin(PI/180*ecliptic_longitude))); }

//求太阳偏差

long double GHA(long double UTo, long double G_sun, long double ecliptic_longitude){

return

(UTo-180-1.915*sin(G_sun*PI/180)-0.02*sin(2*G_sun*PI/180)+2.466*sin(2*ecliptic_longitude*PI /180)-0.053*sin(4*ecliptic_longitude*PI/180));

}

//求格林威治时间的太阳时间角GHA

long double e(long double h, long double glat, long double sun_deviation){

return

180/PI*acos((sin(h*PI/180)-sin(glat*PI/180)*sin(sun_deviation*PI/180))/(cos(glat*PI/180)*cos(su n_deviation*PI/180)));

}

//求修正值e

long double UT_rise(long double UTo, long double GHA, long double glong, long double e){ return (UTo-(GHA+glong+e));

}

//求日出时间

long double UT_set(long double UTo, long double GHA, long double glong, long double e){ return (UTo-(GHA+glong-e));

}

//求日落时间

long double result_rise(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date){

long double d;

if(UT>=UTo) d=UT-UTo;

else d=UTo-UT;

if(d>=0.1) {

UTo=UT;

UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_su n(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e (h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun( t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo))))));

result_rise(UT,UTo,glong,glat,year,month,date);

}

return UT;

}

//判断并返回结果(日出)

long double result_set(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date){

long double d;

if(UT>=UTo) d=UT-UTo;

else d=UTo-UT;

if(d>=0.1){

UTo=UT;

UT=UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun (t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(

h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t _century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo))))));

result_set(UT,UTo,glong,glat,year,month,date);

}

return UT;

}

//判断并返回结果(日落)

int Zone(long double glong){

if(glong>=0) return (int)((int)(glong/15.0)+1);

else return (int)((int)(glong/15.0)-1);

}

//求时区

void output(long double rise, long double set, long double glong){

if((int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<10)

cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":0"<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))< <" .\n";

else cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":"<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<<" .\n";

if((int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<10)

cout<<"The time at which the sun sets is "<<(int)(set/15+Zone(glong))<<": "<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<" .\n";

else cout<<"The time at which the sun sets is "<<(int)(set/15+Zone(glong))<<":"<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<" .

\n";

}

//打印结果

int main(){

long double UTo=180.0;

int year,month,date;

long double glat,glong;

int c[3];

input_date(c);

year=c[0];

month=c[1];

date=c[2];

input_glat(c);

glat=c[0]+c[1]/60+c[2]/3600;

input_glong(c);

glong=c[0]+c[1]/60+c[2]/3600;

long double rise,set;

rise=result_rise(UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_lon gitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UT o)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longi tude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo) ))))),UTo,glong,glat,year,month,date);

set=result_set(UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longi tude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo) ))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitu de(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))) )),UTo,glong,glat,year,month,date);

output(rise,set,glong);

system("pause");

return 0;

}

日出、日落时间大体换算方法

各主要季节间日出、日落时间大体换算方法 根据农历二、八月昼夜平(这仅是粗略的说法。实际上不同纬度,昼夜时间不完全均等)这一基本时间,可将我们这一带主要季节之间日出、日落的大体时间用各时期的换算公式予以粗略测定。现以中国科学院南京紫金山天文台计算的济南地区的日出、日落时间为基础予以说明。济南地区在“春分”时日出6:15,日落18:24,在此粗略各取6点钟。 1、“春分”──“夏至”期间日出、日落时间的大体测定 y=6±n·1'20"(式中6为六点钟,n为这一期间的某一“日序”,y为某一日序时当日的日落、日出时间。日落时间为“+”,日出时间为“-”。0≤n≤92)。 例:①当n=0,即代表3月21日“春分”这一天。式中y=6±0,表示这一天为太阳六点钟出,下午六点钟落下。 ②当n=(最大值)92时,即到“夏至”这一天时,y=6±92×1'20"为6±122'即 6±2:02'≈(8:02',3:58'),即“夏至”日时,日出为早上4点钟,日落为晚上8点钟。 ③试问4月14日几点钟日出、日落?根据上述公式n=24(24为“春分”后3月份内有10天加上4月份1~14日的14天两数之和),代入公式后,y=6±24×1'20"= 6±32',即4月14日这一天日出为5点28',日落为下午6点32'。同理,可求得这一期间任意一天的日出、日落的时间。 2、“夏至”──“秋分”期间日出、日落时间的大体(实际情况是“夏至”时,济南4:53日出,19:34'日落)测定 y1=3:58'+n·1'20",y2=8:02'-n·1'20"(0≤n≤94)当n=0时,即夏至日时, y1=3:58'(日出),y2=8:02'(日落),n=(最大值)94时,y1=3:58'+2:05'≈6,y2=8:02'- 2:05≈6,即至秋分时,日出、日落均在早、晚6点钟。同理,可求得这一期间任意一天的日出、日落时间。 3、“秋分”──“冬至”期间日出、日落时间的大体(实际情况是秋分时,济南5:59'日出,18:11'日落)测定 y=6±n·1'20"(0≤n≤90)当n=0时y=6±0,即9月23日这天日出、日落均为早、晚六点钟。当n=90时(即至“冬至”这天),y=6±90×1'20",亦即y=6±120'=8~4,也就是说“冬至”这天早上8点出太阳,下午4点日落。同理,可求得这期间任意一天的日出、日落时间。 4、“冬至”──(翌年)“春分”期间日出、日落时间的大体(实际上冬至时,济南7:21日出,17:00日落)测定 y1=8-n·1'20",y2=4+n·1'20"(0≤n≤89)式中n=0时,y1=8,y2=4,分别为“冬至”日时的日出、日落时间。当n=89即“春分”这一天,y1=8- 1:58'≈6,y2=4+1.58'≈6,即至“春分”时日出、日落又再次各为早、晚六点钟。同理,可求得这一期间任意一天的日出、日落时间。 在此需要指出的是,(1)各年度间天数不太一样,有时是365天,有时是366天,所以各季节间n值会不完全相同。(2)由于是大体测算,运算中会有误差,有时误差还较大,因

地理时间计算方法

地理时间计算方法

?地理时间计算方法 地理时间计算方法 一、地方时的计算 由于地球自西向东自转,所以同纬度上不同的地区见到日出的时间有早有晚,东边的时刻比西边的时刻要早,这种因经度不同而产生的不同时刻,称为地方时。由于时刻东早西晚,所以每向东15°时间要早1小时,每向西15°时间要晚1小时,经度相差1°,时间 相差4分钟。 二、区时的计算 为了便于不同地区的交流,1884年国际上按统一标准划分时区,实行分区计时的办法。按照这个划分方法,地球上每15°作为一个时区,全球共分24个时区,每个时区中央经线的地方时即为该时区的标准时间区时。区时的计算一般分以下几个步骤: 1. 时区的计算: 如果要求某一经度的区时,首先要计算出该经度所在的时区。经度换算时区的公式:经度数÷15°=M(商)……n(余数)(n<7.5°时,时区数=M;n>7.5°时,时区数=M 1)。根据此公式也可以计算M时区所跨的经度范围,即:15°×M(时区数)±7.5°(15°×时区数为这个时区的中央经线的经度)。 2. 区时差的计算: 如果知道甲地的区时,求乙地的区时,首先要计算两地的区时差。如果甲、乙两地位于中时区的同侧,计算区时差用减法,如东八区与

东二区差6个区时,西九区与西二区差7个区时。如果甲、乙两地位于中时区的两侧,计算区时差用加法,如西六区与东六区差12个 区时。 3. 区时的计算: 区时的计算遵循“东加西减”的原则。已知甲地的时间,求乙地的时间,那么乙地的时间=甲地的时间±甲、乙两地所在时区的区时差(乙地在甲地的东侧用“ ”,乙地在甲地的西侧用“-”)。 4. 计算结果的处理: 由于全天采用24小时制,所以计算结果若大于24小时,要减去24小时,日期加一天,即为所求的时间;计算结果若为负值,要加24小时,日期减一天,即为所求的时间。碰到跨年、月时,要注 意大月、小月、平年、闰年。 三、日界线 日界线简单地说就是“今天”和“昨天”的分界线。从本初子午线开始,如果向东到180°经线,那么180°经线比本初子午线要早12小时;如果向西到180°经线,那么180°经线比本初子午线要晚12小时。这样,同是180°经线,时间却相差24小时。因此,国际上规定,把180°经线作为国际日期变更线,它既是一天的开始,又是一天的结束,即东十二区和西十二区时刻相同,日期相差一天,东十二区比西十二区早一天。值得注意的是,国际日期变更线并非与180°经线完全重合,受各国领土的影响,有些地方日界线不得不改变它的位置而发生弯曲。另一条日界线为0时日界线(或子夜日界

Matlab中计算程序运行时间的三种方法

Matlab中计算程序运行时间的三种方法 经常我们需要计算我们程序到底运行多长时间,这样可以比较程序的执行效率。当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了。 下面我们就说说Matlab中计算程序运行时间的三种常用方法吧! 注意:三种方法由于使用原理不一样,得到结果可能有一定的差距! 1、tic和toc组合(使用最多的) 计算tic和toc之间那段程序之间的运行时间,它的经典格式为 1. tic 2. 。。。。。。。。。。 3. toc 复制代码 换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。这个有点拗口,下面我们举个例子说明 1. % by dynamic of Matlab技术论坛 2. % see also https://www.sodocs.net/doc/1414512405.html, 3. % contact me matlabsky@https://www.sodocs.net/doc/1414512405.html, 4. % 2009-08-18 12:08:47 5. clc 6. tic;%tic1 7. t1=clock; 8. for i=1:3 9. tic ;%tic2 10. t2=clock; 11. pause(3*rand) 12. %计算到上一次遇到tic的时间,换句话说就是每次循环的时间 13. disp(['toc计算第',num2str(i),'次循环运行时间:',num2str(toc)]); 14. %计算每次循环的时间 15. disp(['etime计算第',num2str(i),'次循环运行时间:',num2str(etime(clock,t2))]); 16. %计算程序总共的运行时间 17. disp(['etime计算程序从开始到现在运行的时间:',num2str(etime(clock,t1))]); 18. disp('======================================') 19. end 20. %计算此时到tic2的时间,由于最后一次遇到tic是在for循环的i=3时,所以计算 的是最后一次循环的时间 21. disp(['toc计算最后一次循环运行时间',num2str(toc)]) 22. disp(['etime程序总运行时间:',num2str(etime(clock,t1))]); 复制代码 运行结果如下,大家可以自己分析下 1. toc计算第1次循环运行时间: 2.5628 2. etime计算第1次循环运行时间:2.562

单片机C延时时间怎样计算

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时 应该使用unsigned char作为延时变量。以某晶振为12MHz的单片 机为例,晶振为12M H z即一个机器周期为1u s。一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us 三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us

循环外: 5us 子程序调用 2us + 子程序返回2us + R7赋值 1us = 5us 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序 程序: void delay200ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); } 三. 10ms延时子程序 程序: void delay10ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--);

日出日落时间计算程序(C语言)

//日出日落时间计算C语言程序 #define PI 3.1415926 #include #include using namespace std; int days_of_month_1[]={31,28,31,30,31,30,31,31,30,31,30,31}; int days_of_month_2[]={31,29,31,30,31,30,31,31,30,31,30,31}; long double h=-0.833; //定义全局变量 void input_date(int c[]){ int i; cout<<"Enter the date (form: 2009 03 10):"<>c[i]; } } //输入日期 void input_glat(int c[]){ int i; cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°40′40″)):"<

cin>>c[i]; } } //输入纬度 void input_glong(int c[]){ int i; cout<<"Enter the degree of longitude(west is negativ,form: 40 40 40 (means 40°40′40″)):"<>c[i]; } } //输入经度 int leap_year(int year){ if(((year%400==0) || (year%100!=0) && (year%4==0))) return 1; else return 0; } //判断是否为闰年:若为闰年,返回1;若非闰年,返回0 int days(int year, int month, int date){ int i,a=0; for(i=2000;i

c++程序计时

C++运行时间的代码 如何获取代码运行时间在调试中,经常需要计算某一段代码的执行时间,下面给出两种常用的方式: 第一种:使用GetTickCount函数 #include #include int main() { DWORD start_time=GetTickCount(); { //此处为被测试代码} DWORD end_time=GetTickCount(); cout<<"The run time is:"<<(end_time-start_time)<<"ms!"< #include int main() { clock_t start_time=clock(); { //被测试代码} clock_t end_time=clock(); cout<< "Running time is: "<(end_time-start_time)/CLOCKS_PER_SEC*1000<<"ms"<

日出日落方向图解

日出日落方向图解 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

学生理解:北回归线以北昼长大于昼长,且正午太阳在南,因此东北_南_西北,太阳视运动轨迹大于180度。 钟表定向推导:夏季日出时在6时以前,因此太阳自东北升起,西北落下。 不过以上两种方法缺乏必要的科学性,虽然都能解释、并使学生进一步记忆,但却不利于进一步探究。对于初中及高一学生来说足以。 简易图解释: 太阳光线与晨昏线垂直(上图中能表示),站在晨线上看太阳(图中选择了几个点,也就是蓝点位置),应该就是顺着太阳光线的方向看到的。从图中可以明显看出,夏至日除极昼、极夜区外,太阳都从东北升起,赤道上是东偏北23度26分,向南北两侧角度变大。夏半年的其它日期同理可得。 视运动图分析: 左图是南半球中纬度的太阳视运动,右图是北半球中纬度的太阳视运动,可以很明显的看出日出日落方向。 下面是从原初中课本上的图简化来的。 这是网友制作的,大家都可以依据地概的相关知识制作,也都可以说明日出日落的方向。

如果再进一步细化的分析:要计算任意一个地方在任意一天日出日落的方位角度,可以用下面的公式: 方位角=90 - 0.5arccos[2(sinM/cosN)^2 - 1]公式中,M表示的是某天太阳直射的纬度,N表示的是某地的纬度,^2表示平方。 【例如】北京在北纬40度,则N=40,夏至这一天太阳在北纬23.5度(太阳直射北纬23.5度),即M=23.5,把N和M的值代入上式,可求得:方位角=31度 意思是,夏至这一天,在北京的人看来,太阳是从东偏北31度的方位升起的,是在西偏北31度的方位落下的。 下面是一些特殊地区,特殊时间的日出日落方位。 结论:? 北半球夏半年,全球除极昼极夜现象的地区外,太阳均从东北升起,从西北落下。 北半球冬半年,全球除极昼极夜现象的地区外,太阳均从东南升起,从西南落下。 春分、秋分,从正东升起从正西落下(极点除外)

日出日落时间的计算以及中国常见的日出日落时间

日出日落时间的计算以及中国常见的日出日落时间 以地球中心为原点O,赤道所在平面为XY平面,东经120度指向西经60度为Y轴正方向.球心指向北极为Z 轴正方向.有了Y轴与Z轴就可定X轴的方向(从东经30度指向西经150度) 球面方程:X^2 + Y^2 + Z^2 = 1 (设地球直径为1) 日出日落时刻圈方程:Y^2 + Z'^2 = 1 (Z'以Z轴作坐标变换,见下面) Z'=Z*sin(β+90) (β为太直射点纬度) 求纬度α度时日出时刻.先解出纬度为α度时的X,Y坐标. X=si nα*sin(β+90)*cos(β+90)/(cosβ*cosβ) Y=-SQRT(1-X^2-sinα*sinα) (SQRT为平方根) 有了XY坐标,求反正切,得出一个角度值(由于在XY平面,0度在X轴正向,实际的东经120度在Y轴负方向上,即270度角.所以要换算一下,才能得出经度差) 实算一下:代入的纬度为30.15度,夏至日时,太阳直射点纬度为23.4333度. 算出X=-0.21835,Y=-0.83578,反正切得出-104.64度.计算时假设在Y轴负方向上(即270度或-90度).两者之间相差14.64度,换成时间就是58.56分钟. (计算出的14.64度的含义是指,夏至日那天,当赤道上(北纬0度)东经120度的地方看到日出时,北纬30.15度,东经(120-14.64)度的地方也正好看到日出.) (换句话说:当赤道上东经120度的地方看到日出时,北纬30.15度东经120度的地方日出已经过去58.56分钟了.由于赤道上是昼夜等分的(假设太阳是个点光源),即日出时刻一定在6:00.那么同一经度的北纬30.15度地方,日出时间是5:01:26左右.东经120度10分.比120度还早了40秒钟.所以日出时间为5:00:46) 查寿星万年历,在夏至日的日出时间为4:58:07,日落时间19:04:07. 实测数据 2009年5月1日星期五所有时间为时间 (任意地点日月升落时刻查询) 省会城市

全国各大城市日出日落时间表

全国各大城市日出日落时间表全国各大城市日出日落时间表1日期 北京 天津 石家庄 太原 呼和浩特 沈阳 长春 哈尔滨 上海

南京 月日 时分时分时分时分时分时分时分时分时分时分时分时分时分时分时分时分时分时分

时分时分 1 1 1 11 1 21 7 37 17 00 7 36 17 09 7 32 17 20 7 31 16 59 7 30 17 08 7 27 17 19 7 39 17 13 7 39 17 22 7 35 17 33 7 46 17 21 7 46 17 30

7 58 17 16 7 57 17 26 7 53 17 37 7 14 16 26 7 13 16 36 7 08 16 47 7 13 16 12 7 12 16 22 7 07 16 34 7 15 16 00 7 13 16 10 7 07 16 23 6 53 1 7 03 6 54 17 11 6 52 17 19

7 07 17 19 7 05 17 28 2 1 2 11 2 21 7 24 17 34 7 13 17 46 7 00 17 57 7 19 17 32 7 08 17 44 6 56 17 55 7 27 17 45 7 18 17 56 7 06 18 07 7 35 17 53

7 13 18 15 7 44 17 50 7 33 18 03 7 20 18 46 6 59 1 7 01 6 4 8 17 14 6 34 17 26 6 56 15 49 6 44 1 7 03 6 29 17 16 6 56 16 39 6 43 16 54 6 2 7 17 08 6 4 7 17 29 6 40 17 3 8 6 30 17 46

vc++获取系统时间和程序运行时间

内容: Q:如何获取时间?精度如何? A: 1 使用time_t time( time_t * timer ) 精确到秒 计算时间差使用double difftime( time_t timer1, time_t timer0 ) 2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒 3 使用DWORD GetTickCount() 得到的是系统运行的时间精确到毫秒 4 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒 5 要获取高精度时间,可以使用 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率 BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值 然后用两次计数器的差除以Frequency就得到时间。 6 还有David的文章中提到的方法: Multimedia Timer Functions The following functions are used with multimedia timers. timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高 Q:GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒? A: GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022 "VC++中使用高精度定时器"、QA001813 "如何在Windows实现准确的定时"和QA004842 "timeGetTime函数延时不准"。 Q:vc++怎样获取系统时间,返回值是什么类型的变量呢? GetSystemTime返回的是格林威志标准时间 GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // address of system time structure ); 函数就可以获得了,其中LPSYSTEMTIME 是个结构体 含:年,月,日,周几,小时,分,秒,毫秒。 以下是Time的MSDN文档: Compatibility in the Introduction. Libraries LIBC.LIBSingle thread static library, retail versionLIBCMT.LIBMultithread static library, retail versionMSVCRT.LIBImport library for MSVCRT.DLL, retail version Return Value time returns the time in elapsed seconds. There is no error return. Parameter timer Storage location for time Remarks

日出日落方位及其昼夜长短的计算

昼夜长短的季节变化教学设计 一、设计思路 地理是一门研究人类活动与地理环境的学科,我们生活中到处都有各种地理现象。当前学生的地理学习仅仅注重书本知识,脱离实际,一味地为了应付升学而被动学习,无法将知识与现实生活联系起来。高中地理必修一学习了地球运动产生了昼夜长短的季节变化,在生活中我们能够知道不同季节日出日落时间会发生变化,今天我们就来研究一个地方不同季节昼夜长短的变化规律与计算方法。 二、教材分析:地球围绕太阳公转,使太阳直射点在地球表面不停的做周期性的运动,从而使得不同纬度的地区不同季节昼夜长短不同,日出日落时间,这是地理必修一的一个难点,学生一方面要掌握规律,最主要的是要结合实际生活,理解规律,并且能够灵活应用,达到学以致用的目的。 三、学生情况分析:由于高一年级15级文科班学生我没有带他们的课程,所以具体情况不清楚,但是通过高二教学中的表现,发现他们的基础非常差劲,同时由于自然地理的难度较大,所以在教学中要联系实际,接近生活,让同学们从理性认识转变为感性认识,养成一切联系生活实际的好习惯。 四、教学目标 三维目标 『知识与技能』 1.联系生活实际,理解昼夜长短的变化。

2.比较不同季节的昼夜长短时间,掌握昼夜长短的计算方法。 『过程与方法』 1.记录当地一年四季日出日落时间,总结昼夜长短的变化。 2.通过小组讨论,互相交流,总结计算昼夜长短时间的方法。 『情感态度与价值观』 能够运用所学地理知识解释生活中的一些地理现象,做到联系生活实际,一切从生活实际出发,注重生活经验,并用知识指导生活实践,激发学习地理的兴趣,培养发现问题、分析问题、解决问题的能力,树立正确的人地思想,走可持续发展道路。 教学重点 昼夜长短时间的变化规律 教学难点 昼夜长短时间的计算方法 教学方法:提问式、小组讨论式、讲授式 教学手段:多媒体课件 课时安排:1课时 五、教学过程: 导入:老师:同学们,每天的太阳从哪个方向升起来? 学生回答:东方。 老师:一个地方每个季节太阳升起来的时间一样吗?对我们有哪些影响? 学生回答:不一样。太阳光照强度不一样、白天夜晚长短不一样等等。

Qt系统运行时间差计算

Qt系统运行时间差计算 在网上查了很多资料,发觉网上很多用Qt写的系统运行时间差的例子写的都不是很全,今天自己研究了一下,可以成功得显示日时分秒,觉得不错,就与大家分享了 #include #include #include int main(int argc,char*argv[]) { QCoreApplication a(argc,argv); QDateTime now=QDateTime::currentDateTime(); QDateTime Moon_Festival; QDateTime xmas(QDate(now.date().year(),7,26),QTime(0,0)); //QDate(now.date().year()取当前的年分,可以自己设置,比如2012 Moon_Festival=xmas; //这里最大计数为天 //这里涉及到两个函数daysTo()和SecsTo(),他们分别返回差值的天数和秒数,如果有朋友需要精确到毫秒的,QDateTime还提供了一个msecsTo() qDebug()<start(1000);//设置更新时间间隔 timeFlag=1; } }

日出日落时间计算程序(C语言)

日出日落时间计算程序(C语言)

//日出日落时间计算C语言程序 #define PI 3.1415926 #include #include using namespace std; int days_of_month_1[]={31,28,31,30,31,30,31,3 1,30,31,30,31}; int days_of_month_2[]={31,29,31,30,31,30,31,3 1,30,31,30,31}; long double h=-0.833; //定义全局变量

void input_date(int c[]){ int i; cout<<"Enter the date (form: 2009 03 10):"<>c[i]; } } //输入日期 void input_glat(int c[]){ int i;

cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°40′40″)):"<>c[i]; } } //输入纬度 void input_glong(int c[]){ int i; cout<<"Enter the degree of longitude(west is negativ,form: 40 40 40

(means 40°40′40″)):"<>c[i]; } } //输入经度 int leap_year(int year){ if(((year%400==0) || (year%100!=0) && (year%4==0))) return 1; else return 0; }

日出日落方位详解

(一)、日出和日落方位问题: 不论是南半球还是北半球的任何地点(出现极昼和极夜的区域除外),其太阳出没点的地平方位是偏南还是偏北,取决于太阳直射南半球还是北半球,而与观测地点位于南北半球无关。具体来说: (1)在两分日时,太阳直射赤道,全球各地太阳正东升,正西落(极点除外) (2)北半球的夏半年(太阳直射点位于北半球,即从春分日经过夏至日到秋分日),全球各地太阳东北升,西北落,而且纬度越高,太阳升落的方位越偏北(极点和出现极昼夜的地方除外);北半球的冬半年(太阳直射南半球,从秋分经过冬至到春分日),全球各地太阳东南升,西南落,纬度越高,太阳升落的方位越偏南(极点和出现极昼夜的地方除外)。 (3)就某一地点而言,在太阳直射点向北运动期间,太阳升落的方位将日渐偏北;反之则日渐偏南。(4)南北极点上,太阳高度在一天中是不变的(即太阳周日视运动轨迹总是与极点的地平圈平行),太阳在一天中没有明显的升起和落下。 (二)、太阳视运动图的判断方法: 太阳视运动是地球自转造成的,一天中,地球自西向东自转,看太阳在天空中以观测者为中心,自东向西运动,

一天转一圈。观测者所在的平面是地表切面,叫做地平圈,以观测者为中心的大球面为天球,天体在天球上运动。 (1)太阳视运动最高位置为正午,正午太阳高度为从地平圈中心向太阳最高位置的连线与地平圈的交角,地平圈以上部分长度反映昼长,以下表示夜长。(2)不同半球的正午太阳偏向:北回归线以北和南回归线以南地区,太阳轨迹是平行的。北回归线以北地区,一年中太阳总是偏向南方,每天太阳最高时太阳在正南,南回归线以南地区,一年中太阳总是偏向北方,太阳最高时在正北,根据一年中太阳视运动最高、最低、居中位置来判断季节。 (3)南北回归线之间地区,太阳轨迹也是平行的,只不过正午时太阳有时位于观测者以北,有时位于观测者正头顶(正午太阳高度为90度,正午太阳高度为太阳与地平

计算程序运行时间 time t clock t

计算程序运行时间time t clock t 计算程序运行时间(time_t,clock_t) 转载我们有时需要得到程序的运行时间,但我们也要知道,根本不可能精 确测量某一个程序运行的确切时间,文献中说的很明白,现摘录如下。 我们平时常用的测量运行时间的方法并不是那么精确的,换句话说,想精 确获取程序运行时间并不是那么容易的。也许你会想,程序不就是一条条指令么,每一条指令序列都有固定执行时间,为什么不好算?真实情况下,我们的计算机并不是只运行一个程序的,进程的切换,各种中断,共享的多用户,网络 流量,高速缓存的访问,转移预测等,都会对计时产生影响。 文献中还提到:对于进程调度来讲,花费的时间分为两部分,第一是计时 器中断处理的时间,也就是当且仅当这个时间间隔的时候,操作系统会选择, 是继续当前进程的执行还是切换到另外一个进程中去。第二是进程切换时间, 当系统要从进程A切换到进程B时,它必须先进入内核模式将进程A的状态保存,然后恢复进程B的状态。因此,这个切换过程是有内核活动来消耗时间的。具体到进程的执行时间,这个时间也包括内核模式和用户模式两部分,模式之 间的切换也是需要消耗时间,不过都算在进程执行时间中了。 那么有哪些方法能统计程序的运行时间呢?通过查找一些资料并结合自己的实践体会,摘录和总结了下面几种方法。 一、Linux的time命令 Linux系统下统计程序运行实践最简单直接的方法就是使用time命令,文 献[1,2]中详细介绍了time命令的用法。此命令的用途在于测量特定指令执行 时所需消耗的时间及系统资源等资讯,在统计的时间结果中包含以下数据: 实际时间(real time):从命令行执行到运行终止的消逝时间; 用户CPU时间(user CPU time):命令执行完成花费的系统CPU时间,即命令在用户态中执行时间的总和;

关于日出日落方位的计算与分析

关于太阳视运动日出日落方位探究 四川省成都市武侯高级中学赵廷权 摘要:太阳在天空中的运动是我们日常生活中最容易观测到的自然现象之一,探究它的运动规律可以培养我们的空间想象力和逻辑思维能力。非极昼地区太阳视运动应抓住三个特殊位置:日出、日落和正午太阳所处位置,通过这三个位置即可绘出一天中太阳视运动路线。高中地理的难点在地球运动,而太阳视运动又是地球运动的难点之一,涉及的内容为解日出日落方位、日影朝向、太阳高度变化等问题提供解题依据。本文将在有关天球系统等地理原理基础之上,运用较为简单的数学方法,计算日出日落方位并进行具体分析。 关键词:太阳视运动天球日出日落方位 日出日落方位的问题,一直广受关注,引起一系列热烈讨论。本文将从认识天球系统开始,运用较为简单的数学方法,对日出日落方位进行具体分析。 一、天球系统 天球是人类为方便观察天体在天空中的视位置而假想的一个球体。天球的球心是观测者或地心,天球的半径是任意的。地平圈是通过地心,且垂直于当地铅垂线的平面的无限扩大,同天球相割而成的天球大圆。它把天球分为可见和不可见两部分。地平圈的两极是天顶和天底。天赤道是地球赤道平面的无限扩大,同天球相割而成的天球大圆。天赤道南北两半球。它的两极叫天北极(P)和天南极(P’),如图1。根据以上关系,还可以得到这样的关系:天顶赤纬=当地纬度=仰极高度。[1]如图2。 图1 图2 在地球上的观测者看来,整个天球像是在围绕着我们旋转。这种视运动是地球自转的反映。人们感觉不到地球的自转而是感觉到地外的天空,包括全部日月星辰,概无例外地以相反的方向(向西)和相同的周期(1日)运动。这种视运动被叫做天球周日运动。在北半球看来,天球的周日绕转中心是天北极。紧靠天北极有一颗较明亮的恒星,被称为北极星。天体周日运动行经的路线叫周日圈。天体的周日圈,就是它所在的那条赤纬圈,与天赤道平行。[2]太阳的周日视运动就是这样的情况。并且,由于黄赤交角的存在,以一年为周期,太阳行经路线圈在23°26′N—23°26′S间作回归运动,如图3。同时,根据图2还可以得出,纬度不同,则当地地平圈与天赤道的交角则不同,那么同一天,不同纬度地

如何用vc 获取系统时间和程序运行时间

标题:如何用vc++获取系统时间和程序运行时间 出处:春天的事业 时间:Mon, 22 Jun 2009 17:34:26 +0000 作者:xiechunye 地址:https://www.sodocs.net/doc/1414512405.html,/read.php/612.htm 内容: Q:如何获取时间?精度如何? A: 1 使用time_t time( time_t * timer ) 精确到秒 计算时间差使用double difftime( time_t timer1, time_t timer0 ) 2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒 3 使用DWORD GetTickCount() 得到的是系统运行的时间精确到毫秒 4 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒 5 要获取高精度时间,可以使用 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率 BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值 然后用两次计数器的差除以Frequency就得到时间。 6 还有David的文章中提到的方法: Multimedia Timer Functions The following functions are used with multimedia timers. timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高 Q:GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒? A: GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022 "VC++中使用高精度定时器"、QA001813 "如何在Windows实现准确的定时"和QA004842 "timeGetTime函数延时不准"。 Q:vc++怎样获取系统时间,返回值是什么类型的变量呢? GetSystemTime返回的是格林威志标准时间 GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // address of system time structure ); 函数就可以获得了,其中LPSYSTEMTIME 是个结构体 含:年,月,日,周几,小时,分,秒,毫秒。 以下是Time的MSDN文档: Compatibility in the Introduction. Libraries LIBC.LIBSingle thread static library, retail versionLIBCMT.LIBMultithread static library, retail versionMSVCRT.LIBImport library for MSVCRT.DLL, retail version

怎样用经纬度计算日出日落的时间

怎样用经纬度计算日出日落的时间 下面是一种随经纬度变化的日出日落时间计算方法,我成功运用在一智能路灯控制器中,希望对需要的朋友有帮助。 已知:日出日落时太阳的位置h=-0.833°,要计算地的地理位置,经度Long,纬度G1at,时区zone,UTo为上次计算的日出日落时间,第一次计算时UTo=180°。 (1)先计算出从格林威治时间公元2000年1月1日到计算日天数days; (2)计算从格林威治时间公元2000年1月1日到计算日的世纪数t, 则t=(days+UTo/360)/36525; (3)计算太阳的平黄径L=280.460+36000.770×t; (4)计算太阳的平近点角 G=357.528+35999.050×t (5)计算太阳的黄道经度 λ=L+1.915×sinG+0.020xsin(2G); (6)计算地球的倾角ε=23.4393-0.0130×t; (7)计算太阳的偏差δ=arcsin(sinε×sinλ); (8)计算格林威治时间的太阳时间角GHA: GHA=UTo-180-1.915×sinG-0.020×sin(2G) +2.466×sin(2λ)-0.053×sin(4λ) (9)计算修正值e: e=arcos{[ sinh-sin(Glat)sin(δ)]/cos(Glat)cos(δ)} (10)计算新的日出日落时间 UT=UTo-(GHA+Long±e); 其中“+”表示计算日出时间,“-”表示计算日落时间; (11)比较UTo和UT之差的绝对值,如果大于0.1°即0.007小时,把UT作为新的日出日落时间值,重新从第(2)步开始进行迭代计算,如果UTo和UT之差的绝对值小于0.007小时,则UT即为所求的格林威治日出日落时间;

程序执行时间计算_微秒级计数

1 需要取得系统精确时钟函数: 1)对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求,但要进一步提高计时精度,就要采用QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。 2)这两个函数是VC提供的仅供Windows 9X使用的高精度时间函数,并要求计算机从硬件上支持高精度计时器。 3)QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为: BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount); 数据类型LARGE—INTEGER既可以是一个作为8字节长的整型数,也可以是作为两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下: typedef union _LARGE_INTEGER { struct { DWORD LowPart; // 4字节整型数 LONG HighPart; // 4字节整型数 }; LONGLONG QuadPart; // 8字节整型数 } LARGE_INTEGER; 4)在进行计时之前,应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。笔者在三种PentiumⅡ机器上使用该函数,得到的时钟频率都是1193180Hz。接着,笔者在需要严格计时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。 以下程序是用来测试函数Sleep(100)的精确持续时间。LARGE—INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); // 获得计数器的时钟频率 dfFreq = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp); // 获得初始值 QPart1 = litmp.QuadPart;

相关主题