C 返回随机数的Unix时间转换

C 返回随机数的Unix时间转换,c,function,time,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, ret

我有一些代码可以计算上一次满月是什么时候发生的

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”变量时,它会正确返回日期,但我需要三个单独变量中的日期,以便我可以从“prevFullMoon”函数传递它们

如果您阅读了我在代码中的注释,您应该了解正在发生的事情以及我试图实现的目标

当涉及到结构和指针时,我非常迷茫,因此非常感谢任何帮助

在这个线程中,我主要想知道为什么我的时间转换不起作用,但如果你愿意帮助我完成指针和传递prevY、prevM和prevD,我将不胜感激


谢谢

可能还有更多问题,因为您没有显示
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;

可能还有更多问题,因为您没有显示
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;

弄清楚你想要什么和问题的具体性质的责任在于你,而不是读者。
struct tm ts。。。。int prevY=&ts.tm_年+1900
应该发出警告并在SO上为您保存帖子。启用编译器警告并节省时间。第二个提示:“函数不打印我需要的年、月、日”和
ts=*localtime(&now);strftime(…
是两个首先应该检查其返回值的函数。这甚至不能编译,除非你有一个坏得可怕的编译器。:F或默认为28年前的C标准的东西。编译器需要为此吐出5条诊断消息,但我在问题中没有看到它们如果你不想,问题的具体性质就在你身上,而不是在读者身上。
struct tm ts;…int prevY=&ts.tm_year+1900;
应该发出警告并在SO上为你保存帖子。启用编译器警告并节省时间。第二个提示:“函数不打印我需要的年、月、日”和
ts=*localtime(&now);strftime(…
是两个首先应该检查其返回值的函数。这甚至无法编译,除非你有一个坏得可怕的编译器。:F或默认为28年前的C标准的东西。编译器需要为此发出5条诊断消息,但我在问题中没有看到它们。是的,这很有效。这只是这表明我还有很多东西要学,这是一个愚蠢的错误。非常感谢。PS.validDate也有点像borked,但这是另一个故事。(大部分都是有效的,只是如果天是正确的检测是不正确的)。但不管怎样,我希望能找到答案(或者对此提出不同的看法).是的,这很有效。这只是表明我还有很多东西要学,这是一个愚蠢的错误。非常感谢。另外,validDate也有点像borked,但这是另一个故事。(大部分都是有效的,只是如果天是正确的检测是不正确的)。但不管怎样,我希望能找到答案(或者对此提出不同的看法)。