计算一年中某一天的数字的公式

  • 本文关键字:某一天 数字 一年 计算 c
  • 更新时间 :
  • 英文 :


我必须编写一个程序,询问用户日期和月份。接下来,它应该打印给定日期和月份的年的日期。假设这一年是闰年。

我设计了一个公式来避免使用过多的条件。

#include <stdio.h>
int main()
{
int day, month, dayOfYear;

puts("Give me a day and a month and i'll give you the number of year day!");
scanf("%d %d", &day, &month);

/* (month / 2) is used for add the extra day of the months with 31 days. */
dayOfYear = (month - 1) * 30 + day + (month / 2);


/*All the months are calculated of 30 days, so, after of February 29 it's 
*substrated one day to compensate the remaining day. For non-leap years, substract 
*two.
*/
if(month > 2)
{
dayOfYear -= 1;
} 


printf("The day of the year: %dn", dayOfYear);
return 0;
}

我花了很多时间想办法做简短易懂的事。我写这篇文章是因为我希望这篇文章对某些人有用。

可以回答您自己的问题;我能回答我自己的问题吗?,但重要的是要把它做好。

OP的方法在第9个月和第11个月都失败了。

#include "stdio.h"
#include "time.h"
int doy2021(int month, int day) {
int dayOfYear = (month - 1) * 30 + day + (month / 2);
if (month > 2) {
dayOfYear -= 2; // 2021
}
return dayOfYear;
}
int main() {
for (int m = 1; m <= 12; m++) {
struct tm first_of_the_month = {.tm_year = 2021 - 1900, .tm_mon = m - 1,
.tm_mday = 1, .tm_hour = 12};
mktime(&first_of_the_month);
// int tm_yday; // days since January 1 -- [0, 365]
printf("Month:%2d  doy(mktime):%3d  doy(Juan):%3dn", m,
first_of_the_month.tm_yday + 1, doy2021(m, 1));
}
return 0;
}

Ouput

Month: 1  doy(mktime):  1  doy(Juan):  1
Month: 2  doy(mktime): 32  doy(Juan): 32
Month: 3  doy(mktime): 60  doy(Juan): 60
Month: 4  doy(mktime): 91  doy(Juan): 91
Month: 5  doy(mktime):121  doy(Juan):121
Month: 6  doy(mktime):152  doy(Juan):152
Month: 7  doy(mktime):182  doy(Juan):182
Month: 8  doy(mktime):213  doy(Juan):213
Month: 9  doy(mktime):244  doy(Juan):243 Differ
Month:10  doy(mktime):274  doy(Juan):274
Month:11  doy(mktime):305  doy(Juan):304 Differ
Month:12  doy(mktime):335  doy(Juan):335

关注闰年。来自维基百科的公历闰年:

如果(年不能被4整除(,那么(这是一个普通年份(否则如果(年不能被100整除(那么(它是闰年(否则如果(年份不能被400整除(那么(这是一个普通年份(否则(这是闰年(

你跳得太快了。

最新更新