我的日期如下:171115 183130
(17-11-15 18:31:30)。我使用的API要求我根据周数提供日期,但由于它是GPS服务,因此它需要是1980年(第一纪元)的周数
我无法在C中找到任何考虑闰日/秒的库。有什么想法吗?
例如,周1873
应为2015 11 30
。
答案 0 :(得分:3)
由于日期分别显示日期和时间,因此您无需担心闰秒。
使用C库API将DDMMYY转换为自C纪元(1970年1月1日)以来的秒数,减去直到1980年1月1日的秒数并将结果除以7 * 24 * 3600获得从1980年1月1日起经过的周数。
答案 1 :(得分:3)
使用<div id="forest-template">
<template v-for="tree in forest">
<tree v-bind:foo="tree.foo"></tree>
</template>
</div>
无需假设1970年1月1日。 difftime()
将两个时间戳中的差异返回为秒数(difftime()
)。返回值与double
使用的数字类型和纪元无关。
使用time_t
将YMD转换为mktime()
未解决的问题:OP的帖子中未提及时区
time_t
输出
#include <stdio.h>
#include <time.h>
time_t TimeFromYMD(int year, int month, int day) {
struct tm tm = {0};
tm.tm_year = year - 1900;
tm.tm_mon = month - 1;
tm.tm_mday = day;
return mktime(&tm);
}
#define SECS_PER_WEEK (60L*60*24*7)
int GPSweek(int year, int month, int day) {
double diff = difftime(TimeFromYMD(year, month, day), TimeFromYMD(1980, 1, 1));
return (int) (diff / SECS_PER_WEEK);
}
int main(void) {
printf("%d\n", GPSweek(2015, 11, 30));
return 0;
}