我用两个字符串读取年份、儒略日(年日)、小时、分钟和观察。
我使用 sscanf 提取相关变量:
sscanf(tide_str1.c_str(), "%d %d %d %d %Lf", &y1, &j1, &h1, &m1, &obs1);
sscanf(tide_str2.c_str(), "%d %d %d %d %Lf", &y2, &j2, &h2, &m2, &obs2);
对于这个特定的数据集,值为 2011 083 23 22 1.1
然后我创建并填充一个 tm 结构,并运行 mktime,在其间的那一天使用 cout 调用,它从 083 变为 364。
int y1=2011, j1=83, h1=23, m1=22;
struct tm time_struct = {0, 0, 0, 0, 0, 0, 0, 0, 0}, *time_ptr = &time_struct;
time_t tv_min;
time_struct.tm_year = y1 - 1900;
time_struct.tm_yday = j1;
cout << time_struct.tm_yday << endl;
time_struct.tm_hour = h1;
time_struct.tm_min = m1;
time_struct.tm_isdst = -1;
cout << time_struct.tm_yday << endl;
tv_min = mktime(time_ptr);
cout << time_struct.tm_yday << endl;
这是为什么?是因为 tm_mday 和 tm_mon 设置为 0 吗?我最初尝试不将其全部初始化为零,但随后 mktime 返回 -1。如果我只知道年日而不知道月日,我应该怎么做?