<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Julian_Day_Number</id>
	<title>Julian Day Number - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Julian_Day_Number"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Julian_Day_Number&amp;action=history"/>
	<updated>2026-04-07T02:56:03Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Julian_Day_Number&amp;diff=713&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“任何操作系统都需要“时间”格式。 对于操作系统何时开始测量“时间的开始”，似乎没有真正的标准。 但事实上，有一个接近标准。  ==基本定义==  天文学中有一种测量时间的方法，叫做儒略日数（Julian Day Number-JDN）。 出于历史日历系统的原因，它从UTC正午（公元前4713年1月1日）开始测量时间，并使用浮点值以天为单位测量时间。 因为它是一种标…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Julian_Day_Number&amp;diff=713&amp;oldid=prev"/>
		<updated>2022-03-03T09:22:39Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“任何操作系统都需要“时间”格式。 对于操作系统何时开始测量“时间的开始”，似乎没有真正的标准。 但事实上，有一个接近标准。  ==基本定义==  天文学中有一种测量时间的方法，叫做儒略日数（Julian Day Number-JDN）。 出于历史日历系统的原因，它从UTC正午（公元前4713年1月1日）开始测量时间，并使用浮点值以天为单位测量时间。 因为它是一种标…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;任何操作系统都需要“时间”格式。 对于操作系统何时开始测量“时间的开始”，似乎没有真正的标准。 但事实上，有一个接近标准。&lt;br /&gt;
&lt;br /&gt;
==基本定义==&lt;br /&gt;
&lt;br /&gt;
天文学中有一种测量时间的方法，叫做儒略日数（Julian Day Number-JDN）。 出于历史日历系统的原因，它从UTC正午（公元前4713年1月1日）开始测量时间，并使用浮点值以天为单位测量时间。 因为它是一种标准，所以有代码可用于将JDN转换为日历日期。&lt;br /&gt;
&lt;br /&gt;
在任何情况下，一旦从任何自定义时间格式中划分出秒和秒的分数，就剩下“天”。&lt;br /&gt;
这意味着你的数字和儒略日数字之间的差异只是一个一天内的偏差。 当然，也就可以可以截断JDN，并将其用作整数。&lt;br /&gt;
&lt;br /&gt;
==日期计算==&lt;br /&gt;
&lt;br /&gt;
公元2000年的JDN为2451545。&lt;br /&gt;
如果你假装有一个“公元前0年”（或者说公元前1年），那么那一年的1月1日就是JDN 1721060。&lt;br /&gt;
&lt;br /&gt;
计算（标准）公历日期：400年正好有146097天。&lt;br /&gt;
&lt;br /&gt;
计算闰年：如果一年是4的倍数，那么它就是闰年，除非它恰好是一个新世纪，不能除以400。&lt;br /&gt;
&lt;br /&gt;
==代码示例==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint32_t days2years[401];&lt;br /&gt;
&lt;br /&gt;
#define LEAP_FLAG		0x80000000&lt;br /&gt;
&lt;br /&gt;
//days2years表涵盖400年，包括：&lt;br /&gt;
//1）年初的天数&lt;br /&gt;
//2）“世纪”（year/100）向上移动了24位&lt;br /&gt;
//3）闰年标志&lt;br /&gt;
void BuildDaysTbl()&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
	int j = 0;&lt;br /&gt;
	uint32_t days = 366;&lt;br /&gt;
	days2years[0] = LEAP_FLAG;&lt;br /&gt;
	while (days &amp;lt; 0x40000000)&lt;br /&gt;
	{&lt;br /&gt;
		i = 24;&lt;br /&gt;
		while (--i &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			days2years[++j] = days;&lt;br /&gt;
			days += 365;&lt;br /&gt;
			days2years[++j] = days;&lt;br /&gt;
			days += 365;&lt;br /&gt;
			days2years[++j] = days;&lt;br /&gt;
			days += 365;&lt;br /&gt;
			days2years[++j] = days | LEAP_FLAG;&lt;br /&gt;
			days += 366;&lt;br /&gt;
		}&lt;br /&gt;
		days2years[++j] = days;&lt;br /&gt;
		days += 365;&lt;br /&gt;
		days2years[++j] = days;&lt;br /&gt;
		days += 365;&lt;br /&gt;
		days2years[++j] = days;&lt;br /&gt;
		days += 365 + 0x10000000;&lt;br /&gt;
		days2years[++j] = days;&lt;br /&gt;
		days += 365;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//将儒略日转换为公历年，并带有“余数”和闰年标志&lt;br /&gt;
// outputs: *doy = day of year (jan 1 = 0) with leapyear flag, *cent = century AD&lt;br /&gt;
uint32_t JDN_to_GregYear(uint32_t jdn, uint16_t *doy, uint32_t *cent)&lt;br /&gt;
{&lt;br /&gt;
	uint32_t greg_yr = 0;&lt;br /&gt;
	uint32_t qcen, temp, temp2;&lt;br /&gt;
&lt;br /&gt;
	temp -= 1721060;			// make temp align with jan1, &amp;quot;year 0&amp;quot; quadcentury boundary&lt;br /&gt;
	qcen = temp / 146097;		// 400 years contain 146097 days&lt;br /&gt;
	temp %= 146097;				// get the remainder days within the 400 yr span&lt;br /&gt;
	temp2 = temp;				// save a copy&lt;br /&gt;
	// do an approximate conversion to years -- sometimes one too low&lt;br /&gt;
	if (temp &amp;gt; 73048)			// calculation for years 200 to 399&lt;br /&gt;
	{&lt;br /&gt;
		temp -= 73048;			// this shifts the calculation by 1 day&lt;br /&gt;
		greg_yr= 200;&lt;br /&gt;
	}&lt;br /&gt;
	greg_yr += (temp &amp;lt;&amp;lt; 10) / 374014;	// 374014 is a magic number&lt;br /&gt;
&lt;br /&gt;
	if ((days2years[greg_yr + 1] &amp;amp; 0xfffffff) &amp;lt;= temp2)	// fix if greg_yr is off by 1&lt;br /&gt;
		++greg_yr;&lt;br /&gt;
	temp = days2years[greg_yr];&lt;br /&gt;
	*doy = (uint16_t) (temp2 - (temp &amp;amp; 0xfffffff));&lt;br /&gt;
	*cent = ((temp &amp;amp; 0x30000000) &amp;gt;&amp;gt; 24) + qcen * 4;&lt;br /&gt;
	if ((int32_t) temp &amp;lt; 0)&lt;br /&gt;
		*doy |= 0x8000;		// set the leapyear flag on &amp;quot;day of year&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return greg_yr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// convert Jan 1 of a Gregorian year to a Julian day #&lt;br /&gt;
// &amp;quot;sign&amp;quot; bit of the return value is set on a leap year&lt;br /&gt;
uint32_t GregYear_to_JDN(uint32_t greg_yr)&lt;br /&gt;
{&lt;br /&gt;
	uint32_t jdn = (greg_yr / 400) * 146097;	// convert quadcenturies to days&lt;br /&gt;
	uint32_t temp = greg_yr % 400;&lt;br /&gt;
	// add in the days from the remaining years, and adjust jan1, &amp;quot;year 0&amp;quot; to actual JDN&lt;br /&gt;
	jdn += (days2years[temp] &amp;amp; 0xfffffff) + 1721060;&lt;br /&gt;
	jdn |= days2years[temp] &amp;amp; 0x80000000;		// copy the leap year bit&lt;br /&gt;
	return jdn;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==另见==&lt;br /&gt;
===文章===&lt;br /&gt;
* [[CMOS]]&lt;br /&gt;
* [[Time And Date]]&lt;br /&gt;
&lt;br /&gt;
===外部链接===&lt;br /&gt;
* http://en.wikipedia.org/wiki/Julian_Day&lt;br /&gt;
&lt;br /&gt;
[[Category:Time]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>