• GTM、UTC和C/C++中的时间处理


    一、GTM与UTC

    什么是GTM?

    Greenwich Mean Time 格林尼治标准时间。这是以英国格林尼治天文台观测结果得出的时间,这是英国格林尼治当地时间,这个地方的当地时间过去被当成世界标准的时间。1972年之前,格林威治时间(GMT)一直是世界时间的标准。1972年之后,GMT 不再是一个时间标准了。

    什么是UTC?

    UTC:Coordinated Universal Time 协调世界时。因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年协调世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的格林尼治标准时间相差不至于太大。并将得到的时间称为UTC,这是现在使用的世界标准时间。协调世界时不与任何地区位置相关,也不代表此刻某地的时间,所以在说明某地时间时要加上时区

    中国是哪个时区?

    中国标准时间(China Standard Time)CST是UTC+8,与UTC-0的时区相差8个小时

    二、时间函数ctime, localtime, gmtime, mktime, difftime, strftime

      在unix系统中,我们获取到的时间戳总是从1970年开始的计算的,1970又叫做unix系统的纪元时间。但其实一开始unix的时间并不是1970年,而是1971年。

      早期运行unix机器的整数累加器是32位的,工作频率在60Hz,也就是unix系统的时钟频率。这导致当时unix系统最大能表示的秒数只有 2**32,也就是2.5年,所以选择系统的纪元时间要定的和当时的时间接近,就定在了1971年。后来随着技术的发展,时钟频率改到了1Hz,时间能表示的范围扩大到了136年,于是就把纪元时间改到最近的一个十年的起始时间,也就是1970年。

      在c++中可以通过ctime头文件来获取时间相关的处理函数,如下示例

    //
    // Created by xunwu on 2020/12/29.
    //
    #include <string>
    #include <iostream>
    #include <ctime>
    #include <thread>
    #include <chrono>
    int main() { //定义时间戳,当前机器time_t是long long time_t t1, t2; //获取返回的时间戳 t1 = std::time(nullptr); //当前线程睡眠2秒 std::chrono::seconds sec(2); std::this_thread::sleep_for(sec); //获取时间戳直接放入t2中 std::time(&t2); std::cout << "time_t t1: " << t1 << " t2: " << t2 << std::endl; //计算时间戳差 double t = std::difftime(t2, t1); std::cout << "difftime t " << t << "s" << std::endl; //转为文本化的显示,注意此处的ct是 结尾的 char* ct = ctime(&t1); std::cout << "ctime: " << ct; //将time_t转换为tm对象格式 std::tm* gmtPtr = std::gmtime(&t1); //再将tm对象转为time_t时间戳 time_t t3 = std::mktime(gmtPtr); std::cout << "mktime t3: " << t3 << std::endl; //将gmtime时间根据当前时区进行格式化输出 char timeBuffer[100]; std::strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %H:%M:%S", std::localtime(&t1)); std::cout << "strftime t1: " << timeBuffer << std::endl; }

      运行输出:

    参考资料:

    https://en.cppreference.com/w/cpp/header/ctime

    https://en.wikipedia.org/wiki/Unix_time

    https://www.timeanddate.com/time/zones/

  • 相关阅读:
    前后端分离项目采用Prerender的SEO优化流程
    spring多数据源分布式事务的分析与解决方案
    Windows上MyEclipse2017 CI7 安装、破解以及配置
    WINDOWS上JDK安装与环境变量设置
    Abp Vnext Vue3 的版本实现
    你好,年轻人
    数据结构·堆
    数据结构·优先队列
    算法笔记·并查集
    JAVA问题解决——Jar包中资源调用
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/14320299.html
Copyright © 2020-2023  润新知