Unix时间转换返回随机数

时间:2017-11-24 20:13:57

标签: c function time

我有一些代码可以计算上次满月的时间。

int humanreadable(seconds){
  time_t now=seconds;
    struct tm ts;
    char buf[80];
    ts = *localtime(&now);
    strftime(buf, sizeof(buf), "%Y %m %d", &ts); 
    printf("%s\n", buf);        // Works correctly, returns "2016 12 14", not needed, only used to for a check
    int prevY = &ts.tm_year+1900;
    int prevM = &ts.tm_mon+1;
    int prevD = &ts.tm_mday;
    printf("%d %d %d\n", prevY,prevM,prevD); // Does not work, returns random numbers
    //later add return prevY/prevM/prevD pointers so I can pass them on
return 0;
}

int prevFullMoon ( int y, int m, int d){  // int * prevY, int * prevM, int * prevD){//temporarely disabled pointers, later need to add them back so assert in main works
  if(valid_date(y,m,d)==INVALID_DATE){
    return valid_date(y,m,d);
  }
  int tmp=epoch(y,m,d);
  while (isFullMoonEpochCheck(tmp)!=1) {
   tmp=tmp-ONE_DAY;
  }
  humanreadable(tmp);
  return 1;
}

int main ( int argc, char * argv [] )
{
  prevFullMoon( 2017, 1, 11);       //temporary code to check what it is returning
  //assert ( prevFullMoon ( 2017, 1, 11, &y, &m, &d ) == 1 && y == 2016 && m == 12 && d == 14 ); //this needs to pass
}

我有一个问题,即我的“人类可读”功能无法打印我需要它的年,月和日。当我打印“buf”变量时,它会正确返回日期,但我需要三个separete变量中的日期,所以我可以从“prevFullMoon”函数传递它们。

如果您在代码中阅读我的评论,您应该了解正在发生的事情以及我想要实现的目标。

在结构和指针方面,我很失落,所以任何帮助都会受到赞赏。

PS。在这个主题中,我主要想知道为什么我的时间转换不起作用,但如果你愿意帮助我指出并传递prevY,prevM和prevD,我会很感激。

谢谢

1 个答案:

答案 0 :(得分:2)

也许还有更多问题,因为您没有显示validDate的实施,但是开始修复这些问题并添加到地址:

int prevY = &ts.tm_year+1900;
int prevM = &ts.tm_mon+1;
int prevD = &ts.tm_mday;

应该是

int prevY = ts.tm_year+1900;
int prevM = ts.tm_mon+1;
int prevD = ts.tm_mday;