日出日落时间以及月相查询系统设计

上传人:天*** 文档编号:103852070 上传时间:2022-06-09 格式:DOC 页数:26 大小:474.80KB
收藏 版权申诉 举报 下载
日出日落时间以及月相查询系统设计_第1页
第1页 / 共26页
日出日落时间以及月相查询系统设计_第2页
第2页 / 共26页
日出日落时间以及月相查询系统设计_第3页
第3页 / 共26页
资源描述:

《日出日落时间以及月相查询系统设计》由会员分享,可在线阅读,更多相关《日出日落时间以及月相查询系统设计(26页珍藏版)》请在装配图网上搜索。

1、学院(部)数学科学学院题 目日出日落时间以及月相月相查询系统设计论文提交日期25日出日落时间以及月相查询系统设计摘要日月变换是生活中常见的两种天文现象,日出日落与人们的生活作息密切相关,而月相中的朔望月是中国农历制定的基础。本文在前人的研究基础上,利用数值逼近的方法计算了各纬度的日出日落时间,并且在ELP-2000/82月球运行理论的基础上,以特征月相出现的时间为基准点得到各地不同时间的月相。最后设计了能够查询一个日出日落时间以及月相的系统。该系统以网页形式呈现,并且模拟了该系统在服务器上发布以及通过客户端访问的过程。关键词:日出日落时间,月相,算法AbstractThe change of

2、the sun and the moon is the two common astronomical phenomenon in life. The sunrise and sunset are closely related to the life of the people, and both the new moon and the full moon, which are a kind of phrases of the moon, is the basis for the Chinese lunar calendar. On the basis of previous studie

3、s, this paper uses the method of numerical approximation to calculate time of the sunrise and sunset of each latitude, and on the basis of the theory of ELP-2000/82 lunar operation, the phase of different locations, different time is obtained based on the occurrence time of characteristic moon phase

4、s. Finally, a system for querying a sunrise, sunset time and moon phase is designed. The system is presented in form of webpage, and it simulates the process of the system being released on the server and accessed through the client.Keywords: The Times of Sunrise and SunSet; Phrases of the Moon; Alg

5、otithm目录第1章前言31.1背景知识31.2研究现状3第2章 系统设计42.1 系统设计目标42.2 需求分析42.2.1 输入输出分析42.2.2 数据处理流程分析52.3 详细设计52.3.1 数据类的设计52.3.2 日出日落时间计算62.3.3 月相计算82.3.4 网页设计11第3章 模拟发布11第4章 改进措施及设想13第5章 总结13主要参考文献14致谢14附录15第1章 前言1.1 背景知识在我国古代,人们遵循着“日出而作,日落而息”的作息规律,在年复一年对日月运行规律的观察下,先人们制定了兼有阳历年和阴历月的历法,称为中国农历。中国农历是阴阳合历,在制定的时候需要同时考

6、虑太阳和月亮的位置,是对日月运行规律的一种反映。比如,中国农历中二十四节气的变化就是一种对太阳运行规律的反映,而农历中最基础的农历月则是根据月相的变化规律制定的,严格地以日月合朔,即新月发生的时刻作为农历月中的初一。此外,在当代城市发展过程中,道路系统是必不可少的,那么道路照明系统的重要性不言而喻,在设计城市道路照明系统的过程中,为了保证安全性,需要在日落之前打开路灯,日出之后关闭路灯,此外,在最大化利用资源的同时,又需要保证路灯开关时间与日落日出时间相差不大。再者,各城市地理位置不同,导致了日出日落时间不同,因此,如何计算不同地理位置不同日期下的日出日落时间是设计智能路灯控制系统的关键。1.

7、2 研究现状日出日落以及月相变化作为最常见的天文现象,在很久之前,人们就已经对其变化规律有过深入研究,尤其是天文技术得到充分发展的当代,其变化规律已不再是什么秘密。如在VSOP行星理论体系中给出了计算行星日心黄经的周期项系数表(L表)、计算行星日心黄纬的周期项系数表(B表)和计算行星和太阳距离的周期项系数表(R表),将这个理论应用在地球上,可以计算出某个时间太阳相对地球的位置,在这个基础上可以计算出日出日落时间。在研究地月关系上,应用比较广泛的是ELP2000-82月球理论体系,该理论是M. Chapront-Touze和J. Chapront在1983年提出的一个月球位置的半解析理论,和其它

8、的半解析理论一样,这个理论也包含一套计算方法和相应的迭代周期项。ELP-2000/82月球理论共包含37862个周期项,其中20560个用于计算月球经度,7684个用于计算月球纬度,9618个用于计算地月距离。该理论被提出之后,出现了很多基于该理论的改进或简化理论,Astronomical Algorithms一书的第四十五章就介绍了基于该理论的一种改进算法,其周期项参数都是从ELP-2000/82理论的周期项参数转换来的,并且忽略了影响比较小的周期项。用该方法计算出来的月球黄经精度只有10,月球黄纬精度只有4”,但是在以天为单位查询月相时,这样的精度已经足够,更何况这种方法计算速度还很快。在

9、本文所设计的日出日落时间以及月相查询系统中,使用了一种已经成功应用在城市路灯监控系统中的计算方法来计算日出日落时间,而对于如何计算月相,采用了Astronomical Algorithms一书中计算特征月相(即新月,半满上下弦月和满月)的算法,在此基础上计算某个时间段的月相。第2章 系统设计2.1 系统设计目标日出日落时间以及月相查询系统主要功能是能够查询不同地理位置下的不同日期的日出日落时间以及当天的月相。该系统在形式上设计为一组网页,即一个网站。并且该系统可以根据输入的不同经纬度以及日期反馈出相应的正确结果,并且所得结果与真实值误差不能太大。当该系统设计完毕之后,将网站发表于服务器上,并且

10、能够通过客户端的浏览器访问该网站。由于条件所限,该过程也可以通过利用PC机作为模拟服务器,通过浏览器访问该网页。由于JSP页面可以被预编译,且能够很容易的和静态模板(如HTML)结合以及开发者很容易对源代码进行更新,故利用JSP技术进行网站的设计。在编译器方面,选择使用Eclipse这一软件,并且在其上加载Tomcat组件,这可以很容易地在设计过程中模拟网站发布之后的状态,便于网站的测试和修改。在网站设计结束之后的模拟测试上,同样选择Tomcat作为模拟服务器进行测试,具体配置过程见第三章。2.2 需求分析2.2.1 输入输出分析由于该系统可以根据不同地理位置以及日期给出相对应的日出日落时间以

11、及月相,可以得知该系统的输入至少有两个:经纬度以及日期情况,输出应该为当地日出日落时间以及对应月相。该过程在网站中表现为如何利用网页收集数据,对此,仿效一些网站登录界面的设计,使用表单传递数据(即经纬度和日期)。然后在其他的jsp页面处理所获得的数据,通过计算获得日出日落时间以及月相,并在网页上打印出来。2.2.2 数据处理流程分析获得确定的经纬度以及日期之后,需要根据已有的算法给出日出日落时间以及月相。但是经纬度和日期可以有很多种表示方式,为了简化系统的设计,需要对输入的格式作出一些限制。比如将东西经和南北纬用地理上标准表示法代替,将具体度数统一化为以度为单位以及限定输入的日期格式。由于表单

12、传递的数据格式一般为文本格式(可视作字符串处理),在算法过程中需要将这些数据转化为数字格式并且考虑到有其他操作的可能,所以直接建立两个数据类,在类里面定义处理文本数据(也即字符串)的方法以及其他可能用到的所有方法。将经纬度以及日期格式化之后,通过引用计算日出日落时间和月相的算法给出最终的结果。为了保证jsp页面的简洁以便于扩展和维护,将动态部分的算法(这里指计算日出日落时间以及月相的算法)写成一个Java类,并利用JavaBean技术在jsp页面中使用涉及到的所有类。2.3 详细设计2.3.1 数据类的设计在需求分析中我们经过分析知道需要设计两个数据类用来格式化表单传递的文本数据。由于表单传递

13、的数据类型为字符串,在这两个数据类中需要将字符串转化为对应的数据。我们假设将地理位置存储在GeoPoint类中,将时间信息存储在Date类中。在类GeoPoint中必须有属性表示经度和纬度,分别命名为glong和glat,对于如何区分南北纬和东西经,我们假定北纬和东经数值为正,否则数值为负数。在类Date中,需要有表示年月日的基本属性分别命名为year,month,monthDay,若需要对该类进行扩充以表示更加准确的时间可额外加上hour,minute,second等属性表示一天中的时分秒。在这两个数据类中,需要定义方法,将表单传递的字符串类型的数据转化为数字类型的数据,假定表单传递过来的地

14、理位置信息为“40N120E”,时间信息为“2001-1-1”,经过初始化之后,在类GeoPoint中,glong值为120,glat值为40,具体过程为:将字符串做为一个字符数组,分别提取数字和字母,以字母做为正负标志,然后给对应属性赋值;在类Date中,year值为2001,month值为1,monthDay值为1,其他一些属性默认为0,具体算法为:利用Java字符串分割方法Spring.split(),以“-”做为分割符分割字符串,得到年月日对应的字符串,最后转化为数字,给对应属性赋值。此外,在数据类中,可以根据其他的要求设计一些特殊的方法,比如在天文计算方面常常会涉及到天文儒略日的计算

15、。所以在Date类中预先设计将格里历(即我们所说的公元纪年)转化为儒略日期的方法如下:设Y 为给定年份,M 为月份,D 为该月日期。一般来说,如果所求日期精确到某天的具体时间的时候,将不足一天的时间长度化作以天为单位的小数。也就是说D是带小数的该月日期。若M 2,Y 和M 不变,若 M =1 或2,以Y1 代Y,以M+12 代M,换句话说,如果日期在1 月或2 月,则被看作是在前一年的13 月或14 月。对格里高利历有:A = INT(Y/100)B=2-A+INT(A/4)对儒略历,取B = 0所要求的儒略日即为: 该方法可用于计算正数年和负数年的儒略日期。该方法在Astronomical

16、Algorithms一书的第七章可以找到。1具体的数据类的代码见附录GeoPoint和Time。2.3.2 日出日落时间计算一般地,人们把太阳从地平线升起的时刻定义为日出时刻,太阳从地平线落下的时刻定义为日落时刻。但是由于大气折射的影响,此时太阳的实际位置在地平线之下。这也是导致北半球日落最早时刻在12月初而不是冬至日,日出最早时刻在6月初而不是夏至日的原因。因此,在计算日出日落时间的时候需要考虑到大气折射导致的误差。下面这个计算模型通过引入日出日落时刻太阳相对参考平面的角度修正了大气折射对结果的影响。首先,假设地球为球形,日出日落时圆盘形太阳的上沿刚好到达地平线,此时,以观察者所在地平面为参

17、考面,太阳位置为-0.833(计算时间时采用时间角计算方式,即180=12h)。2计算日出日落时刻时,首先假设太阳位置为12h即180,用这个进行第一次运算,然后将计算之后的结果作为新的太阳位置,再次代入迭代,直到符合要求(即满足要求的精度)。具体步骤如下:已知:日出日落时太阳的位置h-0.833,要计算地点的地理位置,经度Long,纬度G1at,时区zone,UTo为上次计算的日出日落时间,第一次计算时UTo180。(1)先计算出从格林威治时间公元2000年1月1日到计算日天数days(可以将其看做以2000年1月1日为起点的儒略日期,以便于计算2000年之前的日期到2000年1月1日的天数

18、,以负数表示); (2)计算从格林威治时间公元2000年1月1日到计算日的世纪数t, 则 (3)计算太阳的平黄径 : (4)计算太阳的平近点角 : (5)计算太阳的黄道经度 : (6)计算地球的倾角 (7)计算太阳的偏差 (8)计算格林威治时间的太阳时间角GHA:(9)计算修正值e:令 则e的计算方法如下: (10)计算新的日出日落时间: (其中“+”表示计算日出时间,“-”表示计算日落时间) (11)比较UTO和UT之差的绝对值,如果大于0.1即0.007小时,把UT作为新的日出日落时间值,重新从第(2)步开始进行迭代计算,如果UTo和UT之差的绝对值小于0.007小时,则UT即为所求的格林

19、威治日出日落时间; (12)上面的计算以度为单位,即180=12小时,因此需要转化为以小时为单位表示的时间,再加上所在的时区数Zone,即要计算地点的日出日落时间为: 本文在设计查询系统时默认为北京时间,即Zone默认为8。2该方法在计算中低纬度的日出日落时间时准确度很高,计算高纬度日出日落时间时结果误差大于中低纬度。当计算位置位于西半球或者南半球时经度Long为负数,纬度Glat为负数。该方法误差已被证实相差结果不到1分钟。3将该方法用Java语言写出具体的实现过程。在Java中,写一个日出日落时间计算函数实质上是写一个所有过程函数(指计算中间参数的方法)构成的计算类,设这个类的类名为Sun

20、RiseSet。对上述算法的过程实现如下(具体代码见附录SunRiseSet):(1) 计算到公元2000年1月1日天数,为了方便计算,我们在计算过程中将日期转化为儒略日期计算。因此,计算日期与2000年1月1日相差的天数就是两者对应的儒略日之差.(2) 按照算法步骤计算相关参数,这部分基本上按照算法给出的公式计算即可。(3) 循环迭代求出UT。将每次求出的UT作为UTO重新开始计算,直到满足精度要求,即相邻两次计算结果只差不超过0.1。在参考文献2中给出了实现该算法的C+代码,并且在CSDN博客上也能够找到实现该算法的Java方法(具体地址见附录SunRiseSet类)。然而,参考文献中的代

21、码虽然简洁但是存在一定的错误,例如在实现循环迭代这一过程时,其将UT的初值设为0,使得第一次迭代结束之后UTO的值为0,而不是第一次迭代中计算得到的UT的值,这实际上是以初值为0开始迭代,而不是180。要解决这个问题只需要在循环迭代之前先进行一次迭代并判断是否符合精度,若不符合则进入循环迭代的过程。在CSDN博客上找到的代码,其正确性已经得到验证,但是实现过程很复杂,不利于阅读和维护,并且观其算法只能求解日期在2000年1月1日之后的某一天的日出日落时间。综合以上两种代码优缺点,我在设计系统的过程中,主要借鉴了参考文献中的C+代码,将其改写成了Java语言,并且在这个过程中修正了循坏迭代中的错

22、误,并借鉴了儒略日期的计算过程,改进了计算天数部分的代码,与CSDN博客中的比较,该算法可以求解日期在2000年以前的某天的日出日落时间。经过验证,改进之后的算法误差仍然在1分钟以内。该算法详细实现代码见附录的SunRiseSet类。2.3.3 月相计算在考虑如何计算月相时,考虑了以下两个模型:其一,月相的更替周期约为29.53天,如果能够知道一个周期月相的变化,那么只要确定某天的月相,便可以根据周期变化得到距离该日任意天数的月相;其二,假如知道一个月相周期以及如何计算新月发生时刻,计算距离待计算日期最近的新月发生时候,两个时刻之差表示的就是新月发生时刻到所求月相经过的时间,比如,新月发生在3

23、月3日凌晨,那么3月4日凌晨的月相就是月相周期中在新月之后一天的月相,即我们所称的娥眉月。考虑到我们计算月相以天为单位,如果要通过周期变化得到精确的结果,最小的月相周期应为2953天的月相,周期跨度过长且无法找到相应数据,如果以29.5天作为一个周期,误差随着天数的增大而变大。因此,选择模型二,并且为了减少天数相差过大所造成的误差,计算一个月内特征月相新月,半满上弦月,满月,半满下弦月发生时刻,以距离待计算日期最近标志月相为基准点,通过时间差找到月相。下面给出计算月相的模型。首先是计算四个特征月相:新月,半满上弦月,满月,半满下弦月,这四个特征月相发生时刻按照精确定义是指月亮视黄经与太阳视黄经

24、相差为0,90,180,270的时刻。计算这些月相发生的时刻就需要计算日月视黄经(可以忽略章动的影响,因为黄经章动对星体影响一致,计算日月视黄经之差时消去)。计算方法来自Astronomical Algorithms一书第四十七章1,其中的公式基于Chapronts ELP-2000/82 月亮理论,以及Bretagnon和Francou的VSOP行星理论的太阳计算部分。计算过程如下:(1) 计算特征月相发生时刻代表参数k, 其中year是带小数点的十进制数,例如1987.25表示1987 年3 月末(因为这0.25年是从1987年的年首起算的)。对计算所得k的值向下取整得到新月发生时刻,在此

25、基础上,k 的值增加了0.25,为平半满上弦月时刻;增加了0.50,为平满月时刻;增加了0.75,为平半满下弦月时刻。(2) 计算从J2000.0起算的儒略世纪数T: T在J2000.0之前是负数,(J2000.0表示2000年的儒略日期)(3) 计算平月相产生时间JDE:(4) 计算JDE时刻的角参数:i. 太阳的平近点角 ii. 月亮的平近点角 iii. 月亮的维度参数 iv. 月亮轨道升交点经度 v. 行星的参数 (5) 视月修正参数的计算:一般我们所说的月相都是视月相,而在天文计算中往往得到的是平月相。通过周期项计算所得结果为平月相发生时刻,如果要得到视月相发生时刻,需要加上视月误差。

26、要计算真月相(视月相)发生的时刻,请对JDE 加上下面的修正,以日为单位在半满上弦月时,需要加上修正W,下弦时需要减去修正W,W的计算公式如下: 此外,计算所有月相的视月相时还需要加上修正量An/1000000,其中An为以下参数的和: 这样我们就能够给出特征月相(视月相)的具体发生时刻。我们计算某一天的月相,即月相待定,但是知道该月相发生的时刻。在本次设计的月相查询系统中,将一天的月相定义为该日零点时刻的月相。计算待定月相所在的月相周期的特征月相的发生时刻,计算待定月相发生时刻与四个时刻的日期差,找出绝对值最小的那一项以及对应特征月相,待定月相即为距离该特征月相时间跨度为日期差的月相(日期差

27、为负数表示待定月相在特征月相之前)。在实际设计过程中,不可能把每时每刻的月相全部录入,因此选取一个月相周期中有代表性的月相(即以天为间隔选取月相),一共选取了30张月相图片,按照月相变化顺序排列并编号为1-30,其中首尾月相都是新月,这符合月相周期为29.53天这一特征。此时我们将所得日期差除以24小时四舍五入取整,以此表示天数差。但是,考虑到计算特征月相的过程中存在误差,也就是说通过两个新月时刻差所得到的月相周期与真实月相变化周期相比存在误差,为了减小误差,我们需要修正日长时间,找到和待定月相相邻的两个特征月相的发生时刻,计算这两个特征月相之间的日期差,并统计这两个月相之间经历过的月相个数n

28、,用/(n+1)来代替24小时作为日长作为分数来给出天数差,在这个基础上找到月相编号。具体的实现代码见附录MoonPhrase。2.3.4 网页设计在网页设计上,只需要设计一个数据收集页面和一个处理输出页面即可,此外还可以增加错误处理页面比如404页面。数据经由收集页面通过表单传递给处理页面,在处理页面引用JavaBean(即附录以及上文中涉及到的Java类)得到结果。在收集页面index.jsp中经纬度在表单中直接输入,至于日期的输入,为了规范化输入选择使用js插件WdatePicker,可以在网页上选择所要输入的日期,该插件置于目录My97DatePicker下。在处理页面Calcu.js

29、p中,引用编写的Java类输出结果,日出日落时间可以直接作为字符串输出,而月相的计算结果为对应月相的编号,需要在Calcu.jsp中打开相应的月相图片,其中月相图片存放在目录Moon_img下。并且在处理页面中使用了try-catch结构,保证了在输入错误的情况下能够对错误进行处理。具体详见附录。第3章 模拟发布在Eclipse中建立Web工程Web_design,在目录src下建立包com.Des,所编写的所有的需要用到的JavaBean(也就是Java的类)都在该包下面。下载并安装Tomcat组件之后运行页面index.jsp进行测试。经过多测试以及修正之后,待网站设计完善之后,将工程We

30、b_design导出为WAR包。在官网上下载Tomcat7.0的压缩包,解压之后运行bin目录下的startup.bat即可模拟服务器的运行。在运行Tomcat7.0之前需要在本机上安装Java并且配置好相关内容。确定Tomcat能够正常运行之后,将其关闭,在目录webapps下导入之前的WAR包,当Tomcat再次运行的时候,会自动进行解包,生成网站目录。下面配置Tomcat服务器,以保证可以通过域名访问到发布的网站。打开位于conf目录下的server.xml文件将Connector标签中port号改成80,即将端口号改成80端口。配置Host标签下Context标签为,docBase为网

31、站目录名称。之后运行Tomcat,可以在浏览器的地址栏中通过输入localhost访问。若要通过局域网访问,则需要在路由器上建立IP地址与服务器映射。若要在本机上通过其他域名访问,则需要修改hosts文件下的域名与IP地址的映射,并且将sever.xml中的localhost改成相对应的域名。本文采用本机发布-本机访问的方法模拟网站的发布。在配置好Tomcat之后,在浏览器地址栏中输入localhost,按回车后出现数据收集界面如下: 输入过程如下:选择日期之后(这里选择5月30日),将连续输出所选日期前后各15天,一共31天的结果,为避免占用太多空间,这里只展示首尾两周的结果: 从该结果可以

32、看出,2018年5月15日和6月14日月相为新月,并且在2018年的农历上,这两天为初一,由于制定农历时严格地以新月发生的时刻所在日为每月初一,因此可以证明月相的计算结果可信。第4章 改进措施及设想对于数据收集页面,可以加入一些典型城市,通过选择这些城市给出该城市对应的结果。具体实现方法可以将城市及其对应经纬存入数据库中,然后通过JSP访问数据库,获得对应的经纬度,再通过计算得到相应的结果。在此基础上们可以对网站功能进行扩展,比如点击城市名称时,可以得到该城市下属辖区的具体的日出日落时间,这需要经纬度的精确表示。再者打开网页时能够定位到访问地址所在地区,并显示当地天气情况等。甚至可以给网站加上

33、根据经纬度给出城市名称以及显示在地图上的位置的功能。这些功能并不属于日出日落时间以及月相查询系统的必要功能,因此在本文不予实现。第5章 总结本文所设计的日出日落时间以及月相查询系统能够查询不同地理位置的不同日期的日出日落时间以及当天月相。该系统可以作为其他系统的一个模块应用于不同的情况下,例如,如果要设计一个系统用来制作农历,就可以调用该系统的月相计算部分;此外,该系统还可以应用于天气预报系统中用来给出相关信息。在设计系统的过程中,对城市路灯监控系统中日出日落时间算法的实现(即参考文献2)一文中给出的计算日出日落时间的C+代码进行了修正,改正了其中循环迭代的错误后应用到系统的设计中。对Astr

34、onomical Algorithms一书第四十七章中计算月相的算法进行了扩展,与其相比,本系统中计算月相的算法可以日期给出相应的月相,而不仅仅只能够计算特征月相的发生时刻。然而,本文在设计上也有些许不足,比如算法的原理是基于一些半解析理论,相当于使用了数值逼近的方法得出结果,在结果上存在着微小误差,不适用于精度要求很高的天文方面的运算,若要求更加精确的结果可以通过日月地三者位置关系以及开普勒行星定律得到。主要参考文献1Meeus,Jean.Astronomical algorithmsM.Richmond:Willmann-Bell,Inc,1991:59-67,319-3242 景春国 舒

35、冬梅 顾德英. 城市路灯监控系统中日出日落时间算法的实现D. 现代计算机(专业版), 2003. 3 陈素君.计算月出和日出日落的几种数学模型J.现代职业教育,2016(34):38-394 赵海兰 徐继明 徐建华. 经纬度路灯控制器的设计与研究D. 照明工程学报, 2011.致谢从2017年末选题到2018年五月初,经历了紧张又短暂的五个月。这五个月来,我查阅了很多资料,了解了相关的天文知识,也粗略的学习了如何利用JSP技术开发网页,以及如何搭建服务器。我最感激的就是我的导师刘枫老师,选题结束后,他指导了设计的方向,以及最终成果的模板并且不厌其烦的修改论文。在这里我要向刘枫老师表示衷心的感谢

36、。其次我还要感谢这大学四年每一个教过我的老师,他们为我展示了优秀的思维能力以及良好的编程基础。最后,我要向每一个帮助过我的同学表示感谢,感谢他们的鼓励和帮助。附录该附录收录了系统设计过程中使用的JavaBean以及网页主体部分的代码。一、 网页主体代码(1) 数据收集页面主体部分代码经纬:日期:(2) 处理页面主体部分代码日期日出时间日落时间月相 % time.minDays(15); for(int i=0;i img id=moon_img src= align=middle 二、 使用的JavaBean代码1. 数据类代码1.1 经纬度类GeoPointpublic class GeoP

37、oint double glong=0,glat=0;public void Initialize(String sourceStr)char temp=new char10;int temp_i=0;char arr=sourceStr.toCharArray();for(int i=0;i=0&arridays_of_month_2month-1) monthDay=monthDay%days_of_month_2month-1;month=month+1;if(month12) month=month%12;year=year+1; elseif(monthDaydays_of_mont

38、h_1month-1) monthDay=monthDay%days_of_month_1month-1;month=month+1;if(month12) month=month%12;year=year+1;public void minDays(int day)monthDay=monthDay-day;if(year%400=0) | (year%100!=0) & (year%4=0)if(monthDay=0) month=month-1;if(month=0) month=month+12;year=year-1;monthDay=monthDay+days_of_month_2

39、month-1; elseif(monthDay=0) month=month-1;if(month=0) month=month+12;year=year-1;monthDay=monthDay+days_of_month_1month-1;2. 日出日落时间计算SunRiseSet类该部分代码参考自CSDN博客(public class SunRiseSet private final static double h=-0.833;/计算从2000年1月1日开始的天数public static double Daysfrom2000(Time date) Time date_2000=ne

40、w Time();date_2000.getDate(2000-1-1);return date.DateToJDE()-date_2000.DateToJDE();/角度规范化public static double Mod360Degree(double Degree)double degree;while(Degree1) act=0;if(c0.1)UTo=UT;UT=UToToUT(UTo,geo,date,RiseSet);return UT;/求时区public static int Zone(GeoPoint geo) if(geo.getLongitude()=0) retu

41、rn (int)(int)(geo.getLongitude()/15.0)+1); else return (int)(int)(geo.getLongitude()/15.0)-1); /日出时间的get方法public String getSunrise(GeoPoint geo,Time date)double sunrise;sunrise=get_SunRiseSet(geo,date,true);sunrise=sunrise/15+8;/北京时间下的某位置日出日落时间/sunrise=sunrise/15+Zone(geo.getLongitude();/当地日出日落时间/Sy

42、stem.out.println(sunrise);return (int)(sunrise)%24+:+(int)(60*(sunrise-(int)(sunrise)+:+(int)(60*(60*(sunrise-(int)(sunrise)-(int)(60*(sunrise-(int)(sunrise)+ .n;/日落时间的get方法public String getSunset(GeoPoint geo,Time date)double sunset;sunset=get_SunRiseSet(geo,date,false);sunset=sunset/15+8;/北京时间下的某位

43、置日出日落时间/sunrise=sunrise/15+Zone(geo.getLongitude();/当地日出日落时间/System.out.println(sunrise);return (int)(sunset)%24+:+(int)(60*(sunset-(int)(sunset)+:+(int)(60*(60*(sunset-(int)(sunset)-(int)(60*(sunset-(int)(sunset)+ .n;3. 月相计算MoonPhrase类public class MoonPhrase private static int days_of_month_1=31,28,31,30,31,30,31,31,30,31,30,31;private static int days_of_month_2=31,29,31,30,31,30,31,31,30,31,30,31;private static double MoonPhrase_parm=0,0.25,0.5,0.75;/行星的参数public double A=new double15;/历书儒略

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!