我想从某个日期到当前日期获得许多天。 这是我目前的代码,从1970年1月1日开始。
int days_since_my_birth(int day, int month, int year) {
time_t sec;
sec = time(NULL);
printf("Number of days since birth is %ld \n", sec / 86400);
return d;
}
我可以使用time()
函数来获取我输入日期后的秒数吗?
答案 0 :(得分:0)
从较晚日期的朱利安整数中减去较早日期的朱利安日整数。以下内容告诉您如何做到这一点。
http://www.cs.utsa.edu/~cs1063/projects/Spring2011/Project1/jdn-explanation.html
否则,http://pdc.ro.nu/jd-code.html已有C版
long gregorian_calendar_to_jd(int y, int m, int d)
{
y+=8000;
if(m<3) { y--; m+=12; }
return (y*365) +(y/4) -(y/100) +(y/400) -1200820
+(m*153+3)/5-92
+d-1;
}
答案 1 :(得分:0)
使用time()函数
获取日期和现在之间的天数
#include <math.h>
#include <time.h>
int days_since_my_birth(int day, int month, int year, double *days) {
struct tm birthdate = { 0 }; // set all fields to 0
birthdate.tm_year = year - 1900;
birthdate.tm_mon = month - 1; // Months since January
birthdate.tm_mday = day;
birthdate.tm_isdst = -1; // Let system determine if DST was in effect
// Form timestamp for the birthdate.
time_t birth_time = mktime(&birthdate);
if (birth_time == -1) return FAIL;
time_t now;
if (time(&now) == -1) return FAIL;
// Calculate difference in seconds and convert to days.
// Round as desired (rint(), floor(), etc.)
*days = floor(difftime(now, birth_time)/86400);
return SUCCESS;
}
我可以使用time()函数来获取我输入日期后的秒数吗?
也许,C没有指定time(NULL)
返回秒,也不是像1970年1月1日那样的特定时期 - 尽管通常以这种方式实现。
difftime()
以秒为单位返回差异。
答案 2 :(得分:0)
这是我最终如何做到的。如果输入的生日是在1970年之前,它就无法工作。感谢所有的帮助。
我刚开始学习c所以可能有更有效的方法来实现它。
int days_since_my_birth(int day, int month, int year) {
//create a time struct and initailize it with the function parameters
struct tm time_info = { 0 };
time_info.tm_year = year - 1900;
time_info.tm_mon = month -1;
time_info.tm_mday = day;
//get the number of seconds from 1970
int n = time(NULL);
// convert the birthdate to seconds
double birthday = mktime(&time_info);
// convert the birthdate to days
birthday = (birthday / 86400);
//get the no of days alive by subtracting birthdate days
int result = (n / 86400) - birthday;
return result;
}