如何将朱利安的代码更改为公历并返回
How can I change the code for the julian to gregorian and back?
我有这两个函数,但我无法获得从儒略历转换为公历的正确结果。问题是,如果一年可以被 4000 整除,它会给我一个不正确的结果,因为它应该是闰年,但根据要求它不是。所以我尝试添加条件,但它不是 100%。谢谢。
int gregorian_to_julian(int year, int month, int day)const {
int result=0;
int cnt=0;//**added by me
if(year>=4000)//**added by me
cnt=year/4000;//**added by me
int a = (14 - month) / 12;
int m = month + 12 * a -3;
int y = year + 4800 -a;
result = day + ((153 * m + 2) /5) + (365 * y) + (y/4) - (y/100) + (y/400) - 32045;
result-=cnt;
return result;
}
int julian_to_gregorian(int sequence, int &year, int &month, int &day)const {
int result = 1;
int cnt=0;
int a = sequence + 32044;
int b = (4 * a +3) / 146097;
int c = a - (146097 * b) / 4;
int d = (4 * c +3) / 1461;
int e = c - (1461 * d) /4;
int m = (5*e +2) / 153;
day = e - ((153 *m +2) /5) +1;
month = m + 3 -12 * (m/10);
year = 100 *b + d - 4800 + (m/10);
if(year>=4000)//**added by me
cnt=year/4000;//**added by me
day+=cnt;//**added by me
return result;
}
规则是这样的:
_leap=false;
if (year% 4==0) _leap=true;
if (year%100==0) _leap=false;
if (year%400==0) _leap=true;
// here _leap holds true if it is a leap year
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- 如何将朱利安的代码更改为公历并返回
- 根据朱利安日历计算月份
- 超能力 NDK 安卓:返回 int 在"extern"块中成功,在调用函数中失败
- 科普利安表格示例C++
- 使用ANativeWindow_lock返回错误 -22 与安卓 Gstreamer SDK
- 两个归一化向量的 GLSL 点在安卓上返回值 > 1.0
- 如何计算朱利安算术
- 伊利德返回参数