【发布时间】:2012-03-05 22:38:09
【问题描述】:
我在两个字符串中读取年份、儒略日(年日)、小时、分钟和观测值。
我使用 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。如果我只知道年日而不知道月日,我应该怎么做?
【问题讨论】:
-
一年中的某一天有时被错误地称为“儒略日”。事实上,Julian Day 数字是自公元前 4713 年 1 月 1 日以来的天数;它用于天文学。
-
是的,但它在某些专业中被广泛使用(不正确),以至于在实践中是正确的。只要一个领域内的每个人都使用相同的行话……交流就会发生。