gpt4 book ai didi

c++ - tm_wday 返回 0-6 范围之外的大整数

转载 作者:行者123 更新时间:2023-11-27 23:38:16 26 4
gpt4 key购买 nike

c++ 中使用 tm 结构时,我得到 tm_wday 的值是大整数(例如 4199040,比预期的大得多0-6 范围:)。为什么会这样?所有其他值(例如年、月等)都是正确的。

我已经看到以前的问题,其中工作日似乎计算错误,即由于时区差异等原因,0-6 范围内的值与预期值不同。但我很困惑为什么我会得到这么大的数字?它似乎也不是内存位置(不是十六进制格式的数字)。

#include <stdio.h>
#include <iostream>
#include <time.h>


struct tm get_time(std::string timestamp_string = "2019.08.16D11:00:00"){

struct tm tm;
int hh, mm;
int MM, DD, YY;
float ss;
const char * timestamp = timestamp_string.c_str();
if (sscanf(timestamp,"%d.%d.%dD%d:%d:%f", &YY,&MM, &DD,&hh, &mm,&ss) != 6) std::cout<<"oops";

tm.tm_year = YY - 1900; // Years from 1900
tm.tm_mon = MM - 1; // Months form January
tm.tm_mday = DD;
tm.tm_hour = hh;
tm.tm_min = mm;
tm.tm_sec = ss;
tm.tm_isdst = 0;
return tm;

}

int main(){
struct tm tm = get_time("2019.08.16D11:00:00");
std::cout<<"Year is: "<<tm.tm_year<<std::endl; //119 - is correct
std::cout<<"Month since Jan is: "<<tm.tm_mon<<std::endl; //7 - is correct
std::cout<<"Weekday is: "<<tm.tm_wday<<std::endl;//4199040- why is this so large?

return 0;
}

最佳答案

环顾四周,预计在定义 tm 结构后,您运行函数 mktime() 并引用实例以更新派生值,例如 tm_wday。所以固定的main()函数应该是:

int main(){
struct tm tm = get_time("2019.08.16D11:00:00");
mktime(&tm); //needs to be called to update derived values such as tm_wday
std::cout<<"Year is: "<<tm.tm_year<<std::endl; //119 - is correct
std::cout<<"Month since Jan is: "<<tm.tm_mon<<std::endl; //7 - is correct
std::cout<<"Weekday is: "<<tm.tm_wday<<std::endl;//shows 5 now - is correct
return 0;
}

关于c++ - tm_wday 返回 0-6 范围之外的大整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527155/

26 4 0
文章推荐: html - 产品轮播,在手机上显示一个元素
文章推荐: html -
文章推荐: php - 如何在 PrestaShop 的 .tpl 文件中创建全局变量?
文章推荐: html - 标签与
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com