c/c++时间类型

2023-11-13

1、time_t

time_t 类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。

time_t cur = time(NULL);

2、struct timeval

在time.h中的定义为:

struct timeval
{
	__time_t tv_sec;        /* Seconds. */
	__suseconds_t tv_usec;    /* Microseconds. */
};

其中,tv_sec为Epoch(1970-1-1零点零分)到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。毫秒(ms): tv.tv_usec/1000。

gettimeofday(&tv, NULL);//获取当前时间

3、struct tm

在标准库wchar.h内,我们可以看到结构体tm的声明如下:

#ifndef _TM_DEFINED
struct tm {
        int tm_sec;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11] */
        int tm_year;    /* years since 1900 */
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
        };
#define _TM_DEFINED
#endif  /* _TM_DEFINED */
  1. 注意月份是0-11,而不是1-12,所以在tm结构体与string转换的时候,要相应的做减1加1处理。
  2. tm_isdst为夏令时设置,0为非夏令时,1为夏令时。由于21世纪的中国并没有实行夏令时制度,所以编写国内程序我们可以忽略这个变量。

利用这个结构体,我们就可以完成日期时间与string字符串的转换了,由于计算的方便,我们一般选择将日期时间的string转换成time_t类型。

4、常用的时间函数

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

 //将结构中的信息转换为真实世界的时间,以字符串的形式显示 // Www Mmm dd hh:mm:ss yyyy 其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh:mm:ss 表示时间,yyyy 表示年份。
char *asctime(const struct tm *tm);

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

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

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

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

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

//返回两个时间相差的秒数
double difftime(time_t time1, time_t time2); 
asctime_r(), ctime_r(), gmtime_r() // 时间函数的 _r 版本都是线程安全的。

//时间转字符串
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr); 

//字符串转时间

char *strptime(const char *str, const char *format, struct tm *timeptr); 

5、日期时间处理与字符串string转换

c/c++日期时间处理与字符串string转换

  1. 日期时间string转换为time_t

    time_t StringToDatetime(string str)
    {//2021-08-25 12:00:00
        tm tm_;                                    // 定义tm结构体。
        sscanf(str.c_str(), "%d-%d-%d %d:%d:%d", &tm_.tm_year, &tm_.tm_mon, &tm_.tm_mday, &tm_.tm_hour, &tm_.tm_min, &tm_.tm_sec);// 将string存储的日期时间,转换为int临时变量。
        tm_.tm_year -=  1900;                 // 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year减去1900。
        tm_.tm_mon -= 1;                    // 月,由于tm结构体的月份存储范围为0-11,所以tm_mon减去1。
        tm_.tm_isdst = 0;                          // 非夏令时。
        time_t t_ = mktime(&tm_);                  // 将tm结构体转换成time_t格式。
        return t_;                                 // 返回值。
    }
    
  2. 日期时间time_t转换为string

    string DatetimeToString(time_t time)
    {
        tm *tm_ = localtime(&time);                // 将time_t格式转换为tm结构体
        char s[64]={0};      // 定义总日期时间char*变量。
        sprintf(s, "%04d-%02d-%02d %02d:%02d:%02d", tm_->tm_year+1900, tm_->tm_mon + 1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);// 将年月日时分秒合并。
        return string(s);  // 返回转换日期时间后的string变量。
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c/c++时间类型 的相关文章

  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • asp.net core http 如果没有内容类型标头,则删除 `FromBody` 忽略

    我在 http 中使用 bodyDELETE要求 我知道目前删除主体是非标准的 但是允许的 使用时出现问题HttpClient它不允许删除请求的正文 我知道我可以使用SendAsync 但我宁愿让我的 API 更加灵活 我希望这个机构是可选
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和

随机推荐

  • iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)

    NSURLConnection下载 我们在前面的文章中介绍了MAC电脑搭建Apache服务器 在Sites文件夹中放置一个视频文件MVVM mp4 pbb 通过NSURLConnection进行下载 访问http localhost 我们可
  • 局部变量和静态局部变量

    一 局部变量 局部变量也叫auto自动变量 auto可写可不写 一般情况下代码块 内部定义的变量都是自动变量 它有如下特点 1 作用域 a 在一个函数内定义 只在函数范围内 也就是在定义变量的 之内 有效 b 在复合语句中定义 只在复合语句
  • 解决GridView控件的居中问题

    先简单介绍一下GridView控件 它被称为列表视图控件 用于在一个列表中显示数据源的值 其中每列表示一个字段 每行表示一条记录 简单来讲 就是一个列表 可以将数据源绑定到该列表控件上 在浏览器上显示出来就是存放着数据的列表 我在VS201
  • jetbrains IDE 关闭自动提示

    去掉Auto display code completion前面的对勾
  • python基础知识之函数的定义及用法

    目录 前言 一 函数的定义和调用 1 函数的作用 2 函数名的命名规范 3 函数的返回值 return 4 调用函数 二 函数的参数 1 函数形参和实参 2 参数传递的两种形式 3 函数定义的三种形参 三 函数的作用域 1 全局变量 2 局
  • Android 5.0学习之AnimatedVectorDrawable

    http blog csdn net cym492224103 article details 41677825 前言 示例代码地址 animated vector drawable 几句代码 几个配置文件即可实现以上效果 流畅的体验 无缝
  • replaceAll用法 (vue搜索框过滤数据高亮显示)

    举例 vue搜索框过滤数据高亮显示 在计算属性里面写一个方法 先用filter过滤item 然后用indexof方法查找是否包含 item name index0f this txt gt 1 indexof gt 1表示包含 this t
  • 01-不是过去的原因而是现在目的

    01 不是过去的原因而是现在目的 例1 如我们现在不敢或不喜欢与人交往的性格 甚至闭门不出 我们很自然的认识是受小时候在父母虐待下长大或父母关系不和 或在学校 职场收到耻辱 家庭环境等过去因素的影响而留下心灵创伤 也就是我们内心把原因归结为
  • 跨平台C/C++开发软件CLion使用教程:入门指南(二)

    本篇教程主要介绍 CLion 入门指南里关于协助编码的内容 点击获CLion官方正式版 自动完成 Ctrl SpaceCLion 中的基本补全在您键入时工作 并提供所有可用补全的列表 要过滤此列表并仅查看与预期类型匹配的建议 请使用智能完成
  • JAVA 练习题(4)

    数字资产的概念被提出来 用于给数字资产加密的业务变得非常火热 现有一套用于给数字资产加密的系统专门用于产生加密密码 请设计一个方法用于给数字密码进行加密 加密规则如下 根据数字长度的每位数 给每位数 5 再对10求余 最后将所有数字反转 得
  • 使用Electron来给若依系统打包成exe程序,出现登录成功但是不跳转页面(已解决)

    阿丹 之前解决了css找不到文件等问题 那么新问题就来了 问题描述 进入到登录页面发现问题 点击登录一直在转圈 但是不进去 更诡异的是 后台相应的很快 已经显示操作成功了 甚至 redis中都存了token了 并且前台的验证码图片还能正常访
  • STM32串口中断处理中.是否需要清除接受/发送完成/中断 标志位的问题.

    关于是否在串口中断服务程序中 是否加清除标志位操作 手册有说明 正常的读写DR寄存器都能达到清楚标志的效果 所以除了多缓存通信的情况下 没必要增加清除标志位 两个清除函数 USART ClearFlag 清除完成标志位 USART Clea
  • ShardingSphere-JDBC 5.0.0-beta使用:数据源拒绝建立连接,来自服务器的消息:“连接太多”

    问题分析 I wonder if the jar package is missing This is a non Maven project 问题处理 调试发现 问题出在少了蛮多依赖包 由于是非maven项目 有些jar包还可能冲突 版本
  • Java Robot 编写脚本机器人(一)基本用法测试

    Test public void test throws AWTException 获取机器人类 Robot robot new Robot 获取当前屏幕 Point point MouseInfo getPointerInfo getLo
  • 【Python_PySide2学习笔记(一)】PySide2动态加载UI方式,重写关闭窗体事件

    PySide2设置关闭提示窗口 动态加载UI方式 重写关闭窗体事件 前言 转载 https blog csdn net qq 44703282 article details 119830807 在此链接中介绍了两种重写关闭提示窗体事件的方
  • Vue CLI3配置详解-----脚手架的认识以及项目初始化、项目目录结构

    使用Vue CLI3创建项目 脚手架 scaffold 指施工现场为工人操作并解决垂直和水平运输而搭设的各种支架 建筑界的通用术语 写在前面 如果你只是简单的写几个Vue的 Demo 程序 那你不需要Vue CLI 如果你 开发大型项目 那
  • React中函数组件与类组件的区别

    React中函数组件与类组件的区别 一 组件定义 函数组件 import React from react function Index props const value setvalue useState React return di
  • C语言的可变参数函数理解与应用

    一 可变参数函数的理解 官方定义 C语言允许定义参数数量为可变的函数 这称为可变参数函数 它与传统意义上的强制定义固定参数的函数不同 可变参数函数应用最广的是格式化输入输出函数 如printf scanf 可支持任意参数输入输出 可变参数函
  • 【OpenCV C++】光流法进行运动目标检测

    OpenCV C 光流法进行运动目标检测 什么是光流 程序说明 代码 运行效果 什么是光流 光流 optical flow 是空间运动物体在观察成像平面上的像素运动的瞬时速度 光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性
  • c/c++时间类型

    1 time t time t 类型 这本质上是一个长整数 表示从1970 01 01 00 00 00到目前计时时间的秒数 如果需要更精确一点的 可以使用timeval精确到毫秒 time t cur time NULL 2 struct