当前位置: 首页 > article >正文

【C++】时间time库

time

文章目录

  • time
    • time_t
    • struct tm
    • 示例

linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。
time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构 struct timeval,它精确到微妙。
struct tm 结构体类型指针,这种结构体中分别定义了年月日时分秒等,我们可以利用它格式化输出

struct timeval
{
    long tv_sec; /*秒*/
    long tv_usec; /*微秒*/
};

time_t

time_t类型变量用来存储1970至今的秒数
time()获取从1970年至今的秒数

time(0)函数返回当前格林尼治标准时间与格林尼治标准时间1970年0分0秒的时间间隔。

#include <iostream>
int main() {
    time_t t;
    time(&t);
    std::cout << t << std::endl;
    std::cout << time(0) << std::endl;
    //结果相同
    return 0;
}

struct tm

struct tm直接存储年月日的是一个结构 , 用来格式化输出:

struct tm
{
    int tm_sec;  /*秒,正常范围0-59, 但允许至61*/
    int tm_min;  /*分钟,0-59*/
    int tm_hour; /*小时, 0-23*/
    int tm_mday; /*日,即一个月中的第几天,1-31*/
    int tm_mon;  /*月, 从一月算起,0-11*/  1+p->tm_mon;
    int tm_year;  /*年, 从1900至今已经多少年*/  1900+ p->tm_year;
    int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/
    int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/
    int tm_isdst; /*日光节约时间的旗标*/
};

相关API:

#include <time.h>
char *asctime(const struct tm* timeptr);
// 将结构中的信息转换为真实世界的时间,以字符串的形式显示

char *ctime(const time_t *timep);
// 将timep转换为真实世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样

double difftime(time_t time1, time_t time2);
// 返回两个时间相差的秒数

int gettimeofday(struct timeval *tv, struct timezone *tz);
// 返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用

struct tm *gmtime_r(const time_t *timep, struct tm *result);
// 将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针

struct tm *localtime_r(const time_t *timep, struct tm *result);
// 和gmtime_r类似,但是它是经过时区转换的时间。

time_t mktime(struct tm* timeptr);
// 将struct tm 结构的时间转换为从1970年至今的秒数

time_t time(time_t *t);
// 取得从1970年1月1日至今的秒数。

示例

void func(std::ostream& os){
    struct tm tm;
    time_t time = event->getTime();
    localtime_r(&time, &tm);
    char buf[64];
    strftime(buf, sizeof(buf), m_format.c_str(), &tm);
    os << buf;
}
// strftime()函数根据格式字符串将给定的日期和时间从给定的日历时间转换为以空结尾的多字节字符串
size_t strftime( char* str, size_t count, const char* format, const tm* time );


http://www.kler.cn/a/160644.html

相关文章:

  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • 3D编辑器教程:如何实现3D模型多材质定制效果?
  • 【AI日记】24.11.14 复习和准备 RAG 项目 | JavaScript RAG Web Apps with LlamaIndex
  • 1.7 JS性能优化
  • ctfshow-web入门-SSTI(web361-web368)上
  • 【QT】QSS
  • Stm32_串口的帧(不定长)数据接收
  • 在Linux系统中更换yum源为阿里云
  • postgreSql存储jsonb
  • GitLab发展史,这一篇你知道就够了
  • sqlite - sqlite3_exec - c++回调函数的处理
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 14 章:受控生成提示
  • 浅谈web性能测试
  • Python实现FA萤火虫优化算法优化XGBoost分类模型(XGBClassifier算法)项目实战
  • 深度学习——第2章 深度学习开发环境搭建
  • Centos7安装GItLab(在线版)
  • LangChain 22 LangServe用于一键部署LangChain应用程序
  • ubuntu 18.04 pycharm安装
  • 前端使用插件预览pdf、docx、xlsx、pptx格式文件
  • Python之random和string库学习
  • XIAO ESP32S3之AI教程
  • 外包干了一个月,技术明显进步。。。。。
  • 如何5分钟用ChatGPT分析大厂的最新动向?判断最新发展趋势
  • Nginx配置反向代理与负载均衡
  • elasticsearch 是如何实现 master 选举的?
  • UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)