我正在编写一个程序,该程序必须将当前的公历日期和时间转换为儒略日期,然后再转换回公历门。最终,我将需要添加能够添加年、月、日、小时、分钟和秒的功能,但我需要先把这部分排除在外。
现在我有从公历日期到儒略日期的转换,所以从逻辑上讲,我觉得我应该能够以某种方式简单地反转等式,这将相当简单。但是,我正在执行一个两步过程,首先将公历日期转换为儒略日数,然后转换为儒略日数(差异是天数不包括时间)。所以将它转换回来应该只是意味着我必须从等式中得到小时、分钟和秒,然后将儒略日数单独转换回公历日期。我想这是一个简单的过程,将小时、分钟和秒划分和调制 3 次,通常我对数学和逻辑思考这些事情非常擅长,但我的大脑根本无法在这个上运作。
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
我希望我已经很好地解释了我需要什么!感谢你们提供的任何帮助!