首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ISO 8601到C中的time_t转换,反之亦然

关于ISO 8601到C中的time_t转换,反之亦然,我们可以使用C语言中的库函数来实现。

ISO 8601是一种日期和时间的表示方式,它的格式为YYYY-MM-DDTHH:MM:SSZ,其中T表示日期和时间的分隔符,Z表示UTC时间。而C语言中的time_t类型表示的是自1970年1月1日00:00:00 UTC起经过的秒数。

下面是一个简单的示例代码,演示如何将ISO 8601格式的字符串转换为C语言中的time_t类型,以及如何将time_t类型转换为ISO 8601格式的字符串:

代码语言:c
复制
#include<stdio.h>
#include <time.h>

int main() {
    // 将ISO 8601格式的字符串转换为time_t类型
    const char *iso8601 = "2022-01-01T00:00:00Z";
    struct tm tm;
    sscanf(iso8601, "%d-%d-%dT%d:%d:%dZ",
           &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
           &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
    tm.tm_year -= 1900;
    tm.tm_mon -= 1;
    time_t t = mktime(&tm);
    printf("ISO 8601 to time_t: %ld\n", t);

    // 将time_t类型转换为ISO 8601格式的字符串
    t = 1646246400; // 2022-03-01T00:00:00Z
    gmtime_r(&t, &tm);
    char iso8601_buf[20];
    strftime(iso8601_buf, sizeof(iso8601_buf), "%Y-%m-%dT%H:%M:%SZ", &tm);
    printf("time_t to ISO 8601: %s\n", iso8601_buf);

    return 0;
}

在这个示例代码中,我们使用了C语言中的tm结构体来表示日期和时间,使用sscanf函数将ISO 8601格式的字符串解析为tm结构体的各个字段,然后使用mktime函数将tm结构体转换为time_t类型。

同样地,我们也使用了gmtime_r函数将time_t类型转换为tm结构体,然后使用strftime函数将tm结构体格式化为ISO 8601格式的字符串。

需要注意的是,这个示例代码中的时间转换都是基于UTC时间的,如果需要转换为本地时间,可以使用localtime_r函数代替gmtime_r函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 由浅入深,走进中级工程师都未必知道的 JavaScript 时间处理冷知识

    在过去,世界各地都各自订定当地时间,例如我国古代将一昼夜分为十二时辰,每一时辰相当于现代的两个小时。但随着交通和通信的发达,各地交流日益频繁,不同的地方时间给人们造成了许多困扰。于是在1884年的国际经度会议上制定了全球性的标准时,确定以英国伦敦格林威治区这个地方为零度经线的起点(本初子午线),并以地球由西向东每24小时自转一周360°,规定经度每隔15°,时差1小时,而每15°的经线则称为该时区的中央经线。全球被划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。如果两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则增加一日。

    01
    领券