C 使用time()函数获取日期和现在之间的天数

C 使用time()函数获取日期和现在之间的天数,c,C,我想得到从某个日期到当前日期的天数。 这是我当前的代码,它获取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()函数从我输入的日期中获取秒数吗

我想得到从某个日期到当前日期的天数。 这是我当前的代码,它获取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()
函数从我输入的日期中获取秒数吗?

从后一日期的儒略整数中减去前一日期的儒略日整数。下面将告诉您如何做到这一点

否则,它已经有了一个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;
}
长公历到长公历(整数y、整数m、整数d)
{
y+=8000;

如果(m从后一个日期的儒略整数中减去前一个日期的儒略日整数。下面告诉您具体的操作方法

否则,它已经有了一个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;
}
长公历到长公历(整数y、整数m、整数d)
{
y+=8000;
如果(m
使用time()函数获取日期和现在之间的天数

#包括
#包括
我出生后的整数天(整数天、整数月、整数年、双倍*天){
struct tm birthdate={0};//将所有字段设置为0
birthdate.tm_year=年份-1900;
birthdate.tm_mon=month-1;//自1月起的月份
birthdate.tm_mday=天;
birthdate.tm_isdst=-1;//让系统确定DST是否有效
//形成生日的时间戳。
时间\u t出生\u时间=mktime(&出生日期);
如果(出生时间==-1)返回失败;
现在是时候了;
如果(时间和现在)=-1)返回失败;
//以秒为单位计算差值,并转换为天。
//根据需要进行圆整(打印()、地板()等)
*天数=下限(difftime(现在,出生时间)/86400);
回归成功;
}
我可以使用time()函数从输入的日期获取秒数吗

也许,
time(NULL)
不是由C指定返回秒的,也不是从1970年1月1日这样的特定纪元开始的,尽管通常是这样实现的

difftime()
返回以秒为单位的差值

使用time()函数获取日期和现在之间的天数

#包括
#包括
我出生后的整数天(整数天、整数月、整数年、双倍*天){
struct tm birthdate={0};//将所有字段设置为0
birthdate.tm_year=年份-1900;
birthdate.tm_mon=month-1;//自1月起的月份
birthdate.tm_mday=天;
birthdate.tm_isdst=-1;//让系统确定DST是否有效
//形成生日的时间戳。
时间\u t出生\u时间=mktime(&出生日期);
如果(出生时间==-1)返回失败;
现在是时候了;
如果(时间和现在)=-1)返回失败;
//以秒为单位计算差值,并转换为天。
//根据需要进行圆整(打印()、地板()等)
*天数=下限(difftime(现在,出生时间)/86400);
回归成功;
}
我可以使用time()函数从输入的日期获取秒数吗

也许,
time(NULL)
不是由C指定返回秒的,也不是从1970年1月1日这样的特定纪元开始的,尽管通常是这样实现的


difftime()
返回以秒为单位的差值。

以下是我最后的操作方式。如果输入的生日在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;

}

下面是我最后是怎么做的。如果输入的生日在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;

}

1) 使用
mktime()
将生日转换为
time
(如果在1970年1月1日之前出生,可能会有问题)2)使用
time()获取当前时间
3)使用
difftime()
获取秒差,然后除以(60*60*24)。
man mktime
man difftime
。更新:好的,@chux赢了…为什么
“自出生以来的小时数”
的目标是“获得天数”@chux很抱歉应该是天1)使用
mktime()将生日转换为
time\u t
(如果在1970年1月1日之前出生,可能会有问题)2)使用
time()获取当前时间
time()获取秒差
然后除以(60*60*24)。
man mktime
man difftime
。更新:好的,@chux赢了……为什么
“出生后的小时数”
,目标是“获得天数”"?@chux很抱歉daysim在尝试运行代码时遇到异常我自己设法找到了解决方法我已将我的解决方案添加到线程中。我可以问一下为什么您将*天作为函数参数,而不是声明为局部变量吗?@Swannie
*days
用于返回days alive值。返回值表单此函数表示成功或失败。关于“获取异常”,您如何调用该函数?例如
double d;if(自我出生(3,10,2016,&d)=成功)printf(“%f\n”,d)
?我在尝试运行您的代码时遇到异常我自己设法弄清楚了如何运行我已将我的解决方案添加到线程中。我可以问一下为什么您将*天作为函数参数而不是声明为局部变量吗?@Swannie
*days
用于返回days alive值。此函数的返回值表示成功访问或失败。关于“获取异常”,您如何调用该函数?例如
double d;if(自我出生(3,10,2016,&d)=成功后的天数)printf(“%f\n”,d);
?此解决方案容易出现一个接一个的错误作为1)
mktime()
输入对时区敏感,但结果会丢弃时区数据,2)
double
to
int
向0截断。这会影响
(n/86400)-生日计算。请使用今天的日期尝试此函数,如
printf(“%d\n”,自我出生(2016年2月10日));printf(“%d\n”,自我出生后的天数(3,10,2016));printf(“%d\n”,自我出生(4,10,2016))起的天数;
并查看是否得到2或3个不同的结果。根据您的时区,在之前和之后尝试此方法