我正在编写一个程序,需要将当前的公历日期和时间转换为儒略日,然后再转换回公历日期。最终我还需要添加年、月、日、小时、分钟和秒的功能,但我需要先完成这一部分。
目前,我已经完成了从公历日期到儒略日的转换,因此我觉得逆方程应该很简单。但是我正在进行两步转换过程:首先将公历日期转换为儒略日编号,然后再转换为儒略日(区别在于儒略日编号不包括时间)。因此,将其转换回来只需从方程中获取小时、分钟和秒,并对儒略日编号进行单独的转换即可。我认为这只是一个简单的过程,需要进行三次除法和取模运算,以获取小时、分钟和秒。通常我对数学和逻辑思考这些事情都很擅长,但是我的大脑在这个问题上似乎无法正常工作。
下半部分是我在获取小时、分钟和秒钟后需要的计算。它们只是将儒略日数转换为公历日期。
维基页面解释了儒略日的概念,对于不熟悉的人可以参考:http://en.wikipedia.org/wiki/Julian_day 希望我已经足够清楚地解释了我所需要的内容!感谢您能提供任何帮助!
目前,我已经完成了从公历日期到儒略日的转换,因此我觉得逆方程应该很简单。但是我正在进行两步转换过程:首先将公历日期转换为儒略日编号,然后再转换为儒略日(区别在于儒略日编号不包括时间)。因此,将其转换回来只需从方程中获取小时、分钟和秒,并对儒略日编号进行单独的转换即可。我认为这只是一个简单的过程,需要进行三次除法和取模运算,以获取小时、分钟和秒。通常我对数学和逻辑思考这些事情都很擅长,但是我的大脑在这个问题上似乎无法正常工作。
jdn_t gregorian_to_jd(year_t year, month_t month, day_t day, hour_t hour, minute_t minute, second_t second)
{
//implement the conversion from gregorian to jdn
long long a = (14 - month)/12;
long long y = year + 4800 - a;
long long m = month + 12*a - 3;
jdn_t jdn = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 + y/400 - 32045 - 0.5;
jdnt_t jdnt = jdn + (hour-12)/24 + minute/1440 + second/86400;
}
void jdn_to_gregorianTime(jdnt_t jdnt,year_t & year, month_t & month, day_t & day, hour_t & hour, minute_t & minute, second_t & second)
{
long long j = static_cast<long long>(jdnt + 0.5) + 32044;
long long g = j / 146097;
long long dg = j % 146097;
long long c = (dg / 36524 + 1) * 3 / 4;
long long dc = dg - c * 36524;
long long b = dc / 1461;
long long db = dc % 1461;
long long a = (db / 365 + 1) *3 / 4;
long long da = db - a * 365;
long long y = g * 400 + c * 100 + b * 4 + a;
long long m = (da * 5 + 308) / 153 - 2;
long long d = da - (m+4) * 153 / 5 + 122;
year = y - 4800 + (m + 2) / 12;
month = (m + 2) % 12 + 1;
day = static_cast<day_t>(d + 1);
下半部分是我在获取小时、分钟和秒钟后需要的计算。它们只是将儒略日数转换为公历日期。
维基页面解释了儒略日的概念,对于不熟悉的人可以参考:http://en.wikipedia.org/wiki/Julian_day 希望我已经足够清楚地解释了我所需要的内容!感谢您能提供任何帮助!