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

时间:2016-09-28 21:57:04

标签: 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()函数来获取我输入日期后的秒数吗?

3 个答案:

答案 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;

}