计算日出和日落时间会比较复杂,可以通过计算当地的“正午”时间、当地的“白天”时长,用正午时间平分白天时长,得到当地的日出时间和日落时间。(几何方法--计算原理)

1.计算正午时间

一个地方的正午时间,可以通过当地经度与当地所属时区经度的差计算得到。全世界有24个时区,每个时区相隔1小时,因此每个时区之间相差的经度是 360 / 24 = 15°。已北京为例,北京所属时区为东8区,东8区的中心经度是15 * 8 = 120°(因此东8区的范围是112.5° - 127.5°)。

北京的经度是116.46,与东8区中心相差 120 - 116.46 = 3.54,又因为1小时相当于15°,可得

时差 = 3.54 * 1 / 15 = 0.236 小时 = 14.16 分钟

地球是自西向东旋转,因此经度小于时区中心的位置,正午来得比时区中心要晚,正午时间是12:00 + 时差

因此北京的正午时间应该是 12 + 0.236 = 12.236 小时(约12:14)

2.计算白天的时长


                                                                                                                    图1

一个地方白天的时长,可以由一定角度下的太阳光照射出的昼夜分隔线(上图经过B点的斜线),切割这个地方的纬线比例得到。纬线一圈是24小时,根据切割比例就可以得出当地的白天时长。


                                                                                                             图2

用直观一点的图2来解释,太阳以一定角度斜射地球,A地点此刻是正午,白天是B1-A-B2,夜晚是B1-C-B2,因此A点的白天时间为B1-A-B2所占的角度在24小时中的占比。

先来看图2的左边,假设上图中阳光入射角为α, 因为太阳光线(假设太阳光的点为T)与 地球(自转)旋转中心是垂直的关系,那么太阳光线 OT垂直于OB,太阳的平行光线 QT  直于OB, 所以 太阳光线入射角 ∠QTO=∠BOO'=α。

A点的纬度为θ,根据三角函数可得::(正面正切视角)

O‘B / O'O = tanα                                              (1)

O'O / AO = sinθ                                               (2)

所以 O'O = AO * sin θ  ,  O'B = O'O * tanα = AO * sin θ * tanα (AO是地球半径)

再看图2的右边,是这个纬度截面的平面图:

已知 O'B = r * sin θ * tanα 。O'B1 是这个纬度截面的圆的半径 r',  这个半径的计算方法 根据下面计算经纬度距离的推算出来:

r' = r * cosθ                                                    (3)

如正面正切视角,A,B1, B2 处于同一纬度, O'B1 =O'A= r'  ,  OA= OB = r  。根据   O'A=OA*cosθ 。那么,O'B1 =O'A=OA*cosθ= r*cosθ。 从而可以推出    r'  = r*cosθ 。

因此 O'B1 与 O'B 的夹角 cosβ = O'B / O'B1,这样我们就能计算出β。最终可以得到:A点的白天角度cor_A = (360 - β * 2) , A点的白天时间 time_A = A点的白天角度 (cor_A )  / 360 * 24 。

为了进行上面这些计算,需要知道A点阳光入射角为α 。

3.计算阳光入射角α

阳光入射角α是太阳光线与地球赤道面的夹角,春分和秋分时α = 0,夏至时α = 23°27′,冬至时α = - 23°27′。因为1年有365天(暂时忽略闰年的误差),春分(3月20日)、夏至(6月22日)、秋分(9月20日)、冬至(12月22日)把365天分为4个部分,因此可以根据具体日期,得到这个日期的α。

最后,举个例子

以北京,5月25日为例,落在春分到夏至的区间内,是春分过后65天。而春分到夏至一共有92天,这个区间已经过去了65%, 0.71= 65/92;  因此可以计算得出5月25日的 α = 23°27′ * 0.71 = 16.65° 。

北京的经度:116.46,纬度:39.92,5月25日太阳光与赤道的夹角 α = 16.65° 。

代入上面的公式:

O'B = r * sin θ * tanα = r * sin 39.92 * tan 16.65 。

O'B1 = r' =  r * cosθ = r * cos 39.92 。

cosβ = O'B / O'B1 ; β = arccos(O'B / O'B1) = arccos(r * sin 39.92 * tan 16.65 / r * cos 39.92)。

北京白天在纬度切面所占的角度 = (360 - β * 2) 。

北京白天在纬度切面所占的时间 = (360 - β * 2) / 360 * 24 = 208.96 / 360 * 24 = 13.93 h 。

又根据上面的计算,北京的实际正午时间是 12.236小时 。

日出时间 = 12.236 + 13.93 / 2 = 5.27,大约是 05:16 。

日落时间= 12.236 - 13.93 / 2 = 19.201,大约是 19:12。

备注:以上方法(根据别人的方法进行修改的)只能得到一个粗略的日出日落时间,与实际时间有比较大的误差,仅用于理解日出日落时间的计算方法。

根据经纬度和日期计算日出日落时间相关推荐

  1. c语言计算日出日落时间_计算日出日落算法实现

    首先感谢帮我算题的小玉玉~ 算了一周的日出日落,倍觉痛苦,写下来防止下次再算. 根据经纬度和UTC计算日出日落的思路.算法及scala代码如下~ 日出和日落的计算思路: 一天的日出和日落可以根据正午时 ...

  2. android 根据坐标日期计算日出日落时间表

    路灯监控:根据坐标,时间段算出,日出日落作息16进制作息表 1.效果图 2.代码部分 2.1.SunRiseSet 工具类 package com.lg.sun;import java.math.Bi ...

  3. c语言计算日出日落时间_日出日落时间 计算软件 日出日落时间计算公式

    计算日出时间. 日落时间. 昼长. 夜长的公式或方法 是时间计算最简单的. 昼半球的平分线上是12点. 对应的夜半球平分经线就是零点. 希望能对你有所帮助. 这些只跟经度有关系. 如果是半球俯视图就是 ...

  4. Python计算日出日落时间/Astral工具包

    在这个问答(Python日出日落时间 - 问答 - Python中文网)下面看到2个工具包,suntime和astral.先尝试的suntime,根据回答给出的代码看到时间是对的,后来写完自己需要的代 ...

  5. c语言计算日出日落时间_日出日落时间计算程序(C语言)

    实用标准文档 文案大全 // 日出日落时间计算 C 语言程序 #define PI 3.1415926 #include #include using namespace std; int days_ ...

  6. 自动生成 指定范围日期 生成字符串格式时间日期 --计算连续时间 SQL

    DECLARE @StartTime AS DATETIME SET @StartTime= '2016-5-10 ' DECLARE @t TABLE(dDate DATETIME) --计算连续时 ...

  7. c语言计算日出日落时间_利用日期、经纬度求日出日落时间 C语言程序代码

    展开全部 #define PI 3.1415926 #include #include using namespace std; int days_of_month_1[]={31,28,31,30, ...

  8. 4字节 经纬度_Swift4 经纬度计算日出日落时间

    import UIKitclassPGSun: NSObject {structSunriseset { var sunrise= "07:00" //日出 var sunset ...

  9. dateutil 日期计算_时间工具类DateUtil的使用

    ###前言 在Android开发过程中,我们经常会用到时间相关方法.这里我封装一个时间工具类`DateUtil`,以方便使用. 今天涉及内容: 1. DateUtil在MainActivity中的使用 ...

  10. java 计算日出日落时间

    public class SunTimesUtil {static Double start = 0.0;static Double end = 0.0;static Double sRA = 0.0 ...

最新文章

  1. “完美论文”过于真实,道出了科研狗的痛
  2. ZOJ 2913 Bus Pass (近期的最远BFS HDU2377)
  3. C# 读取计算机CPU,HDD信息
  4. python安装numpy-Python使用pip安装Numpy模块
  5. fiddler设置https抓包
  6. linux配置串口不支持serial,linux 串口serial1和serial2不能用?
  7. PAT——1018. 锤子剪刀布
  8. spring mvc学习(34):restful的delete
  9. mybatis generator修改默认生成的sql模板
  10. python函数表格_python 6.7 编写printTable()函数表格打印(完整代码)
  11. 普通人如何走上复利投资致富的门路?
  12. FREETEXT FREETEXTTABLE CONTAINS CONTAINSTABLE
  13. prml线性模型小结
  14. Android支持库AndroidX和support-v4、appcompat-v7的前世今生!
  15. Sqlite锁与事务
  16. (转)为什么LISP语言如此先进?
  17. 宽和窄俯卧撑哪个更难_窄距俯卧撑到底该多窄?
  18. 优秀的程序员都在关注「沉默王三」公众号
  19. PAT甲级A1042 Shuaffling Machine
  20. Redis详解及使用

热门文章

  1. 20套数据可视化大屏模板,附源码下载
  2. SPSS Modeler 和spss statistics有什么不同
  3. linux集群服务器搭建
  4. 平均股价的时间序列图形_统计学-时间序列分析ppt
  5. Python贴吧爬虫
  6. 大数据在智能交通行业的应用
  7. linux 对整个文件 url解码,linux shell实现 URL 编码/解码方法
  8. linux c 编程一站式学习.pdf,Linux C编程一站式学习
  9. js输出100以内的质数
  10. C++-柱面拟合FitCylinder