1、常用的时间存储方式  
  
1)time_t类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒。  
  
2)tm结构,这本质上是一个结构体,里面包含了各时间字段

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 */  };  

其中tm_year表示从1900年到目前计时时间间隔多少年,如果是手动设置值的话,tm_isdst通常取值-1。  
  
2、常用的时间函数

time_t time(time_t *t); //取得从1970年1月1日至今的秒数
char *asctime(const struct tm *tm); //将结构中的信息转换为真实世界的时间,以字符串的形式显示
char *ctime(const time_t *timep); //将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样
struct tm *gmtime(const time_t *timep); //将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针
struct tm *localtime(const time_t *timep); //和gmtime类似,但是它是经过时区转换的时间。
time_t mktime(struct tm *tm); //将struct tm 结构的时间转换为从1970年至今的秒数
int gettimeofday(struct timeval *tv, struct timezone *tz); //返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用
double difftime(time_t time1, time_t time2); //返回两个时间相差的秒数  

3、时间与字符串的转换  
  
需要包含的头文件如下

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string.h>  

1)unix/windows下时间转字符串参考代码

time_t t;  //秒时间
tm* local; //本地时间
tm* gmt;   //格林威治时间
char buf[128]= {0};  t = time(NULL); //获取目前秒时间
local = localtime(&t); //转为本地时间
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", local);
std::cout << buf << std::endl;  gmt = gmtime(&t);//转为格林威治时间
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", gmt);
std::cout << buf << std::endl;  

2)unix字符串转时间参考代码

tm tm_;
time_t t_;
char buf[128]= {0};  strcpy(buf, "2012-01-01 14:00:00");
strptime(buf, "%Y-%m-%d %H:%M:%S", &tm_); //将字符串转换为tm时间
tm_.tm_isdst = -1;
t_  = mktime(&tm_); //将tm时间转换为秒时间
t_ += 3600;  //秒数加3600  tm_ = *localtime(&t_);//输出时间
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &tm_);
std::cout << buf << std::endl;  

3)由于windows下没有strptime函数,所以可以使用scanf来格式化

time_t StringToDatetime(char *str)
{  tm tm_;  int year, month, day, hour, minute,second;  sscanf(str,"%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);  tm_.tm_year  = year-1900;  tm_.tm_mon   = month-1;  tm_.tm_mday  = day;  tm_.tm_hour  = hour;  tm_.tm_min   = minute;  tm_.tm_sec   = second;  tm_.tm_isdst = 0;  time_t t_ = mktime(&tm_); //已经减了8个时区  return t_; //秒时间
}  

C++ 字符串转时间 与 时间转转字符串相关推荐

  1. SQL Server(第二章) 字符串函数、日期时间函数、转换函数

    --1.CONCAT 函数:字符串连接(支持sql server2012 SQL规则 如果与NULL连接返回NILL) SELECT empid,CONCAT(firstname,lastname) ...

  2. python time,datetime当前时间,昨天时间,时间戳和字符串的转化

    由于在使用经常会用到time 模块,所以把经常使用到方法记录下来. 首先把所有需要用到的模块导入进来: import time, datetime 1.当前时间-时间戳 # 当前时间戳 current ...

  3. python字符串转日期_Python:将字符串时间字典转换为日期时间

    我有一个词典提醒[],其中包括关键的alert_date.所有日期/时间都存储为字符串.我在Django中显示日期,但模板无法格式化存储为sting的时间.所以,我想在我的视图中将其转换为: foo ...

  4. Java但中获取时间将时间转换成字符串格式(年月日格式)

    一:直接上马拿走: package cn.wyj.one;import java.text.DateFormat; import java.text.SimpleDateFormat; import ...

  5. mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数

    一.常见字符串函数:1.CHAR_LENGTH  获取长度(字符为单位) 2.FORMAT  格式化 3.INSERT  替换的方式插入 4.INSTR  获取位置 5.LEFT/RIGHT  取左. ...

  6. 面试官问:mysql中时间日期类型和字符串类型的选择

    摘要:MySQL中有多种表示时间日期的数据类型,主要有YEAR.TIME.DATE.DATETIME.TIMESTAMP等 本文分享自华为云社区<一针见血,mysql中时间日期类型和字符串类型的 ...

  7. ?请问怎样将excel表格中的时间格式读取为字符串格式?

    ?请问怎样将excel表格中的时间格式读取为字符串格式? Delphi / Windows SDK/API http://www.delphi2007.net/DelphiNetwork/html/d ...

  8. golang 时间戳_go语言学习笔记(13)-defer函数、字符串常用函数和时间日期函数...

    函数-defer 在函数中,程序员经常需要创建资源(比如:数据库连接.文件句柄.锁等),为了在函数执行完毕后,及时的释放资源,go的设计者提供defer(延时机制). 细节说明: 1:当go执行到一个 ...

  9. java 字符串转时间,时间转字符串

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // 字符串转时间 Date d1= format ...

  10. MySQL 基础 -- MySQL 数据类型说明(数值类型、字符串类型、日期时间类型)、SQL通用语法和SQL分类

    文章目录 1. 数据类型说明(数值类型.字符串类型.日期时间类型) 1.1数值类型 1.2 字符串类型 1.3 日期类型 1.4 数据类型练习:设计一张员工信息表 2. SQL通用语法和SQL分类 2 ...

最新文章

  1. mysql innodbuffer修改_mysql参数之innodb_buffer_pool_size大小设置
  2. 学python最好的方式-Python 学习怎样开始比较好?
  3. boost::convert模块实现lexical_cast的测试程序
  4. 在Kali上安装打印机
  5. java:自定义数据库连接池
  6. 利用curl验证ssl网站(webservice)
  7. 解决XShell连接时无法root用户登录问题【Linux】
  8. 文本检测大满贯!自适应文本区域表示改进形状任意的文本检测
  9. 张朝阳:Q4盈利远超预期 2021年期待产品爆发
  10. netstat查询端口被占用
  11. android job service,服务保活那些事(Job Service ,JobScheduler)
  12. grpc+nginx架构部署指导
  13. EChart:基础学习
  14. 软考网络工程师+计算机等级考试四级网络工程师--MAN标准LAN标准
  15. 线性代数-距离公式汇总
  16. 华为手机如何分享文件至电脑
  17. 【清华大学】操作系统 陈渝 Part4 ——物理内存管理 之 非连续内存分配
  18. 【Qt象棋游戏】05_象棋走棋规则——象、马、将、兵
  19. js 负数转换正_js 负数转换成正数的方法
  20. 耐得住寂寞,是一种境界和品味

热门文章

  1. SQL Server: 不同服务器之间的数据同步
  2. 用计算机打字打错了怎么办,笔记本键盘输入错误怎么办
  3. 简评骑士与凯尔特人交易对双方影响
  4. 想要学习网络安全,安全的论坛和资料如何找?
  5. STM32Mini基于SPI接口的0.96寸OLED屏数据显示
  6. springboot对controller方法进行单元测试
  7. 邮政社招笔试题库_历年中国邮政笔试精华试题及参考答案
  8. android+水滴粘性动画,Android水滴,小球粘性控件生成.
  9. 通过使用锥透镜对生成贝塞尔光束以优化焦斑大小和焦深
  10. ThreadPoolExecutor线程池原理