注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我心飞翔

我有一个梦想,……

 
 
 

日志

 
 
 
 

时标和历法 MJD & UTC  

2009-03-17 14:31:36|  分类: 软件编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

时标和历法  转自:http://www.fmddlmyy.cn/text8.html

1、时标

时标(Time Scale)就是标度时间的方法。在时间的标度上,存在着两个相互独立的需求:一方面,我们希望时间标度能与地球的自转相吻合,可以称作天文学需求;另一方面,我们要求时间标度的单位是精确的,便于大家获得准确的时间。由于地球自转的不均匀性,从这两个需求出发制定的时标会有细微的差异。

世界时(UT1)是基于地球自转的时标,下文会详细介绍。国际原子时(TAI)是基于单位时间的时标,它以“铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间”为一秒,可以称作原子时标。原子时标的准确度为每日数纳秒,而世界时的准确度只有数毫秒。

1.1 本初子午线

对于基于天文观测的时标,地球上位于不同经度的观测者,在同一瞬间测得的结果是不同的。因此需要统一的地理经度基准。

1884年在华盛顿举行的国际子午线会议决定,采用英国伦敦格林威治(Greenwich)天文台埃里中星仪所在的子午线作为时间和经度计量的标准参考子午线,称为本初子午线,又称格林威治子午线。格林威治天文台于1948年迁到苏塞克斯郡(Sussex)的Herstmonceux Castle,但旧址继续被用作0度经线的位置。

1957年国际上以若干天文测时结果长期稳定性较好的天文台数据为参考,求得平均天文台经度原点。1968年国际上把通过地极原点和平均天文台经度原点的子午线称为本初子午线。可见,本初子午线的定义已经不依赖于格林威治天文台旧址。

1.2 世界时

世界时的制定基准是太阳的周日视运动。视运动就是我们看到的运动。本来是地球绕着地轴由西向东转动。但如果观测者以为自己不动,就可以认为太阳在由东向西转动,这就是太阳的周日视运动。

地球在自转的同时还围绕太阳公转,因为地球公转轨道是椭圆的,所以太阳的周日视运动是不均匀的。天文学家制定了以太阳周日视运动的平均速度为基础的平太阳时,平太阳时的基本单位是平太阳日。国际天文学联合会于1928年决定,将由格林威治平子夜起算的平太阳时称为世界时,简称UT。

UT0是天文台观测到的原始数据。UT1在UT0的基础上,消除了地轴摆动的影响。还有一个修正了地球自转速度季节性变动的UT2,现在已经不用了。其实UT0、UT1、UT2的差异很小,不超过0.03秒。现在提到的世界时一般指UT1。

1.3 时区

世界时区的划分,是以本初子午线为标准,从西经7度5分到东经7度5分为零时区;从零时区的边界分别向东和向西,每隔经度15度划一个时区。东、西各划出12个时区,东十二时区与西十二时区相重合。全球共划分成24个时区。各时区都以中央经线的地方时为本区的区时,相邻两时区的区时相差一小时。

在太平洋中靠近180°经线附近有一条国际规定的国际日期变更线(简称日界线)。此线两侧的日期不同。由东向西过日界线,日期要增加一天(即略去一天不算);由西向东过日界线,日期要减少一天(即日期重复一次)。

1.4 协调世界时(UTC)和闰秒

为了调和天文学需求和单位时间需求的差异,一种称为协调世界时(UTC)的折衷时标于1972年面世。UTC的秒长与国际原子时(TAI)相同。但在必要时,UTC会增加1秒或去掉1秒,使UTC和世界时(UT1)的时刻之差保持在±0.9秒以内。这一技术措施被称为闰秒(Leap Second)。

因此,UTC与TAI之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。TAI是从1958年1月1日0时0分0秒开始计时的。在本文写作时(2005年7月),UTC时间比TAI时间小32秒。最近一次闰秒调整是1999年1月1日。下次闰秒调整是2006年1月1日。

我们提到的地区标准时就是在UTC上加上时差得到的本地时间。

1.5 格林威治时间(GMT)

格林威治时间(GMT)是一个比较模糊的概念。在1928年,GMT就是世界时。在UTC被广泛采用后,我们提到的GMT实际上是UTC时间,或者说零时区的标准时。

1.6 GPS时间

GPS时间可以看作没有闰秒调整的UTC时间,并以1980年1月6日0时0分0秒为起点。目前GPS时间比UTC时间大13秒。

协调世界时(UTC)将在2005年底实施一个正闰秒。届时,所有的时钟将拨慢1秒。GPS时间不做闰秒调整,所以将比UTC时间大14秒。从GPS时间计算本地时间,需要减去目前累计的闰秒,再加上本地的时差。

1.7 小结

在所有时标中,日和秒的关系都是固定的,每日86400秒。确定了秒的长度,就确定了日的长度,反之亦然。原子时标以秒为基准,秒和日的长度都是固定的。世界时以日为基本单位,每日的长度会有毫秒级的差异。UTC既保证了单位时间的精确,又通过闰秒调整与天文观测的时间保持不大于±0.9秒的误差。我们日常生活中使用的时间都以UTC时间为标准。

时标作为时间的刻度,为时间长河建立了一根以秒或日为单位的坐标轴。虽然,“GPS时间280948秒”可以标志一个唯一的时刻,但用于日常生活未免不太方便。在日常生活中,我们需要更方便的标记时间的方法,这就是下面要谈到的历法。

2、历法

所谓历法,就是通过合理地安排年、月、日这三个基本量的关系,为时间建立标记的方法。

2.1 回归年和朔望月

前面说过:地球自转可以看作太阳的周日视运动。同理,地球绕太阳的公转,可以被看作太阳的周年视运动。周年视运动的轨道被称作黄道,黄道面和赤道面的夹角是23°27′。随着太阳在黄道上的位置不同,地球上的季节也由春到夏,以至秋冬。

黄道和赤道的两个交点分别被称作春分点和秋分点,这两点在黄道上的两个中点分别被称作夏至点和冬至点。太阳从春分点出发,绕黄道一周,又回到春分点所花的时间被称为回归年。目前测量的回归年长度是365.242189日。

月亮的盈亏变化,产生了月。月亮绕地球旋转,当转到正对着太阳的位置,我们就会观测到满月,这就是望;当转到背对太阳的位置,我们会完全看不到,这就是朔。月亮从朔到朔,或从望到望所花的时间被称作朔望月。目前测量的朔望月长度是29.530588853000001日。

2.2 历法的分类

仅以太阳运动为依据的历法被称作阳历或太阳历。例如我们现在使用的公历。阳历以回归年为基本周期,与月亮运动没有任何关系。

仅以月亮运动为依据的历法被称作阴历或太阴历。例如伊斯兰教国家和地区使用的回历。阴历以朔望月为基本周期,与太阳运动没有任何关系。

同时考虑太阳和月亮运动的历法被称作阴阳历,例如我国的农历。在我国,农历习惯上也被称作阴历。阴阳历把回归年和朔望月并列为制历的基本周期。

由于回归年、朔望月的长度都不是日的整数倍,所以各种历法都要通过增加闰日或闰月,来调整自己与基本周期的差异。下面介绍几种常用的历法。

2.3 儒略历

公元前46年,罗马执政官儒略·凯撒颁布了儒略历。儒略历每年12个月,平年365天,闰年366天。除2月外,单数月份31天,偶数月份30天。2月份平年29天,闰年30天。每隔3年置一闰年。

儒略历是纯太阳历,每年的平均长度是365.25天。每400年,儒略历与回归年大约相差3天,即:

(365.25-365.242189)*400 = 3.1244

凯撒为了纪念改历成功,将他出生的7月从Quintilis改成自己的名字Julius。

2.4 奥古斯都历

奥古斯都是“神圣”的意思,这是当时人们对罗马统治者屋大维的尊称。

从公元前42年到公元前9年,儒略历被错误地执行为“每3年置一闰年”。儒略·凯撒的侄子屋大维纠正了这个错误,同时将自己出生的8月从Sextilis改成自己的称号Augustus,将8月改成31天,将9、10、11、12月的大小月对换,并从2月份扣去一天,成为平年28天,闰年29天。

奥古斯都历的月份设置和现在的公历已经完全相同了。

2.5 格里高利历——公历

公元1582年3月1日,罗马教皇格里高利十三世颁布了格里高利历,将不能被4整除的世纪年算作平年,这就是我们现在使用的公历。

在公历中,每400年有97个闰年,平均每年的长度是:

(365*400+97)/400 = 365.2425 天

每400年,公历与回归年大约相差0.1244天,即:

(365.2425-365.242189)*400 = 0.1244

2.6 儒略日和简化儒略日

在天文学有一种连续纪日的儒略日(JD),它以儒略历公元前4713年1月1日的GMT正午为第0日的开始。还有一种简化儒略日(MJD):

MJD=JD-2400000.5

MJD的第0日是从公历1858年11月17日的GMT零时开始的。我写完前一个句号时的MJD是53583.22260。小数部分是以UTC时间在当天逝去的秒数除以86400得到的。0.22260约为UTC时间的5:20,加上中国的时区就是13:20。

2.7 农历

2.7.1 月的划分

农历的月是严格按照朔的时刻确定的,朔所在日是初一。由于朔望月的长度约为29.A日(将小数部分记作A),假设朔发生在(30-29.A)日以内的时刻,两个朔之间就只有29天,该月就是小月;否则两个朔之间有30天,该月就是大月。

2.7.2 设计

我们已经根据月亮的运动规律将时间长轴划分为一个个月,下面要做的就是确定将哪些月组合成年。设计要求是:该设计应使四季在每年的位置相对稳定。

设计思路是这样的:四季变化以回归年为周期,回归年的长度约为365.242189日。12个朔望月的长度约为354.367066236日,13个朔望月的长度约为383.897655089。如果我们让有的年份有12个朔望月,有的年份有13个朔望月,并按照一定周期循环;在一个周期内,年的平均长度接近回归年的长度,就能实现我们的设计目标。例如:我们在19年中,让7年有13个月,其它年为12个月,则在19年的周期里,每年的平均长度是:

(29.530588853000001*(12*19+7))/19 ≈ 365.246756866 天

这个结果与回归年的长度已经比较接近。包含12个朔望月的年份被称作平年,包含13个朔望月的年份被称作闰年,闰年多加的一个月被称作闰月,这就是《尚书·尧典》中所说的“以闰月定四时成岁”。

那么,闰月加在哪里呢?在介绍置闰的规则前,必须先介绍一下节气。

2.7.3 二十四节气

以春分点为黄经0度,将黄道分成二十四等分,每等分占黄经15度,太阳通过等分点的时刻就是对应节气的时刻。二十四节气只与太阳的运动有关,所以它们在公历中的日期变化不大。

二十四节气从立春(黄经30度)开始,依次为立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至、小寒、大寒。

将立春作为第1个节气,依次编号。偶数编号的节气被称为“中气”(major solar terms),奇数编号的节气仍称作“节气”(minor solar terms)。我们在日常生活中将节气和中气统称为节气(solar terms)。中气是置闰的重要依据。

2.7.4 置闰

在农历中,从前一年正月初一到下一年正月初一被称作年。显然,必须先确定了闰月,才能确定年的范围,我们不可能在置闰规则中用到“年”。实际上,我们用到了另一个概念:岁。从前一个冬至到下一个冬至被称作岁。“岁”的长度就是回归年的长度。

冬至所在的月被定义为11月。如果在两个11月间有12个完整的月,那么这两个11月间的岁就被称作闰岁。因为这两个11月间只有11个中气,所以闰岁的12个月中至少有一个月没有中气。

闰岁的第一个不含中气的月,就是闰月。至此,我们已经描述了编制农历的完整规则。

2.7.5 闰年和Y2033问题

包含闰月的年被称作闰年。如果闰月出现在11月,就可能出现前一年是闰年,但不是闰岁;后一年是闰岁,但不是闰年。一个典型的例子就是Y2033问题。

从2033年的第1个月算起,第8个月没有中气,第11个月有两个中气,第12个月没有中气,第13个月有两个中气,第14个月没有中气。在2032年的11月和2033年11月间只有11个完整的月,不是闰岁。在2033年的11月和2034年11月间有12个完整的月,是闰岁。

按照置闰规则,第12个月被作为闰月,即闰11月。8月没有中气,又不是闰月,被称作伪闰月(Fake leap month)。2034年是闰岁,但不是闰年。2034岁的闰月已经在2033年加过了。

国内1990年以前的万年历都将2033年设为闰7月,这个错误被称作Y2033问题。以后出版的万年历都改成了闰11月。但网上的一些万年历程序现在还在使用错误的农历数据。

2.7 回历

作为太阴历的例子,简单介绍一下回历。回历是伊斯兰教国家和地区采用的历法。它以朔望月为基本周期,每年12个月。平年奇数月30天,偶数月29天,共354天。

每30年为一周,加11个闰日。在30年循环周期中,第2、5、7、10、13、16、18、21、24、26、29年为闰年。闰年在12月底增加一天,共355天。

在回历中,月的平均长度是:

(354*30+11)/30/12 ≈ 29.53 天

这和朔望月长度非常接近,很好地符合了月亮的运动规律。年的平均长度是:

(354*30+11)/30 ≈ 354.366667 天

这和回归年约差11天。因此回历的新年在公历中会逐年提早,循环周期为

365.242189/(365.242189-354.366667) ≈ 33.5838766176 年

回历的起始历元被称作伊斯兰教纪元,定在穆罕默德从麦加迁到麦地那的一天,即儒略历公元622年7月16日,在公历中是公元622年7月19日。例如:伊斯兰教纪元1426年1月1日是公元2005年2月10日。伊斯兰教纪元1427年1月1日是公元2006年1月31日。

2.8 小结

公历和回历的计算都很简单。但公历的月不能符合月亮的运动规律。回历的年不能符合太阳的运动规律。农历较好地符合了太阳和月亮的运动规律,但计算比较复杂。

在网上可以找到计算各国历法的程序。我曾经将其中一个Java程序库的农历部分改写成C/C++程序,以提高运算速度。在我的个人主页上有关于农历计算程序的进一步讨论(http://www.fmddlmyy.cn/cal.html)。不过这些内容已经超出了本文的范围。

在写这篇文章前,我不知道“时标”,对历法的概念也很模糊。通过查资料、写作,我对相关概念的了解越来越清晰。这篇文章的写作目的是将时标、历法的一些基本概念简单、清晰地描述出来,希望有更多的读者像我一样从中受益。

==========================================

MJD 和 YMD 转换   转自:http://blog.csdn.net/the_AK47/archive/2008/03/14/2181748.aspx

所使用的符号:
MJD:   修正的儒略日期
UTC:   世界协调时
Y:     从1900年开始(例如:对于2003年,Y=103)
M:     从1到12月
D:     从1到31日
WY:    从1900 年算起的星期数
WN:    根据ISO 8601 规定的星期数
WD:    从星期1到星期日(7)
K,L,M′,W,Y′: 临时变量
×:     乘法
int:   取整,忽略了余数
Mod 7: 模7,被7除之后的余数(0至6)

a) 如何从MJD中计算Y,M,D,见式(B1)、式(B2)、式(B3)、式(B4)、式(B5)。
Y′ = int[(MJD-15078.2)/365.25………………………………………………(B1)
M′ = int{[MJD-14956.1-int(Y′′365.25)]/30.6001}……………………….(B2)
D = MJD-14956-int(Y′′365.25)-int(M′′30.6001)……………………….(B3)
如果M′ == 14或M′ == 15,那么K = 1;否则K = 0
Y = Y′+K…………………………………………………………………………….(B4)
M = M′-1-K′12……………………………………………………………………..(B5)

b) 如何根据Y,M,D计算MJD,见式(B6)
如果M == 1或者M == 2那么L = 1;否则L = 0
MJD = 14956+D+int[(Y-L)′365.25]+int[(M+1+L′12)′30.6001]…………(B6)

c) 如何根据MJD计算WD,见式(B7)
WD = [(MJD+2)Mod 7]+1…………………………………………………………(B7)

d) 如何根据WY,WN,WD计算MJD,见式(B8)
MJD = 15012+WD+7′{WN+int[(WY′1461/28)+0.41]}………………………….(B8)

e) 如何根据MJD计算WY,WN,见式(B9)、式(B10)、式(B11)
W = int[(MJD/7)-2144.64]…………………………………………………….(B9)
WY = int[(W′28/1461)-0.0079]………………………………………………(B10)
WN = W-int[(WY′1461/28)+0.41]…………………………………………….(B11)

例子: MJD = 45 218 W = 4 315
Y =(19)82 WY=(19)82
M = 9(9月) WN = 36
D = 6 WD = 1(1月)
注:以上公式适用于1900年3月1日至2100年2月28日。

  评论这张
 
阅读(904)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017