怎么计算公园元年1月1日到今天的天数?

predrag 2005-06-16 10:56:42
有没有函数, 或者工具?
...全文
480 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2005-06-16
  • 打赏
  • 举报
回复
基本算法没有问题,但是没有考虑到历法的变迁
你至少没有注意到这个事实
公元元年1月一日开始到现在,每一天都是连续的吗?不。
一个简单的方法就可以证明上述事实——用Linux的cal命令。启动你的Linux在#提示符下输入
cal 9 1752
你会看到:
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
有趣吧一个只有19天的九月。

tian_su 2005-06-16
  • 打赏
  • 举报
回复 1
算今年以前的天数这样算应该会比较简单,而且比较快
int y=year-1;      
int yun=y/4-y/100+y/400; //闰年的个数
int days=365*y+yun; //年数乘以365,加上闰年个数
xyly30 2005-06-16
  • 打赏
  • 举报
回复
晕呀,是不是主要就是闰年的问题呀,
wolfzxq 2005-06-16
  • 打赏
  • 举报
回复
楼主的思路比较好,代码清晰,要是把leapyear函数写成inline函数,那效率就会更高一些
fhvk 2005-06-16
  • 打赏
  • 举报
回复
#include <iostream.h>
void weekday(int year,int month,int day)
{
int i,j;
long sum=0,week=0;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
if((year%4==0&&year%100!=0)||year%400==0)
i=1;
else i=0;
if (month<=2)
{

for(j=0;j<month-1;j++)
{
sum+=a[j];

}
}


else
if(i)
for(j=0;j<month-1;j++){
sum+=b[j]; cout<<sum<<"\n";}
else
for(j=0;j<month-1;j++)
sum+=a[j];
sum+=day;


int leap_year=0;

for(int m=1;m<year;++m){
if((m%4==0&&m%100!=0)||m%400==0){
leap_year++;

}

}

sum+=leap_year+(year-1)*365;//总天数

cout<<sum<<"=sum";



cout<<"\n";
}

void main()
{
int day,month,year;
cout<<"input a date(如:1998 1 25)";
cin>>year>>month>>day;
weekday(year,month,day);

}
ypengfei 2005-06-16
  • 打赏
  • 举报
回复
vbscript里有函数,sql里也有。
predrag 2005-06-16
  • 打赏
  • 举报
回复
大家帮我看一下, 这样写有没有错误?
#include <stdio.h>

bool leapyear (int year) {
return (year%400 == 0 || (year%100 != 0 && year%4 == 0));
}

void main (void) {
int year = 2005;
int month = 6;
int day = 16;
int total = 0;
int m_days[] = {31,0,31,30,31,30,31,31,30,31,30,31};

for (int i=1; i < year; ++i) {
total += 365 + leapyear(i);
}

m_days[1] = 28 + leapyear(year);

for (i=1; i < month; ++i) {
total += m_days[i-1];
}

total += day;

printf("%d-%d-%d\t%d\n", year, month, day, total);

return;
}
Midyta 2005-06-16
  • 打赏
  • 举报
回复

main()
{int year,month,day,y,m[13],i,d;
unsigned long sum;
printf("input year,month,day:\n");
scanf("%d,%d,%d",&year,&month,&day); /*输入年月日时用,号隔开*/
y=366*((year-1)/4)+365*(year-1-(year-1)/4); /*年的天数*/
m[1]=m[3]=m[5]=m[7]=m[8]=m[10]=m[12]=31;
m[4]=m[6]=m[9]=m[11]=30;
if((year%4==0&&year%100!=0)||year%400==0)
m[2]=29;
else
m[2]=28;
for(i=0;i<month;i++)
d=(day-1)+m[i]; /*月和日的天数*//*这里有问题,循环不了,高手看下*/
sum=y+d;
printf("%ld\n",sum);
}
算法应该可以..就是结果不对..
xuzheng318 2005-06-16
  • 打赏
  • 举报
回复
Day year = new Day(year.month.day);
Day today = new Day();
System.out.println("公园元年1月1日到今天的天数"+today.daysBetween(year)+"days.");

year为公园元年。

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧