C/C++时间获取函数

time.h包含C/C++中用于获取时间,和时间转换方面的函数。

1、time()

函数 time_t time(time_t *seconds) 返回自(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。

例子:

cpp 复制代码
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t seconds;

  seconds = time(NULL);
  printf("自 1970-01-01 起经过的小时数 = %ldn", seconds/3600);
  
  return(0);
}

结果:

bash 复制代码
自 1970-01-01 起的小时数 = 3757678

2、localtime()

struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示

  • struct tm结构的细节:
cpp 复制代码
struct tm {
   int tm_sec;         /* 秒,范围从 0 到 59                */
   int tm_min;         /* 分,范围从 0 到 59                */
   int tm_hour;        /* 小时,范围从 0 到 23                */
   int tm_mday;        /* 一月中的第几天,范围从 1 到 31                    */
   int tm_mon;         /* 月份,范围从 0 到 11                */
   int tm_year;        /* 自 1900 起的年数                */
   int tm_wday;        /* 一周中的第几天,范围从 0 到 6                */
   int tm_yday;        /* 一年中的第几天,范围从 0 到 365                    */
   int tm_isdst;       /* 夏令时                        */    
};

例子 1:

cpp 复制代码
#include <stdio.h>
#include <time.h>
 
int main ()
{
   time_t rawtime;
   struct tm *info;
   char buffer[80];
 
   time( &rawtime );
 
   info = localtime( &rawtime );
   printf("当前的本地时间和日期:%s", asctime(info));
 
   return(0);
}

结果:

bash 复制代码
当前的本地时间和日期:Thu Aug 23 09:12:05 2012

例子 2:

cpp 复制代码
// 将时间戳,以时间字符串形式输出

std::string timetToString(time_t tt) {
  auto tm = localtime(&tt);

  std::stringstream ss;
  ss << tm->tm_year + 1900 << std::setw(2) << std::setfill('0')
     << tm->tm_mon + 1 << std::setw(2) << std::setfill('0') << tm->tm_mday
     << std::setw(2) << std::setfill('0') << tm->tm_hour << std::setw(2)
     << std::setfill('0') << tm->tm_min << std::setw(2) << std::setfill('0')
     << tm->tm_sec;


  return ss.str();
}

3、mktime()

time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。

例子:

cpp 复制代码
/* 输入日期判断是周几 */
#include <stdio.h>      /* printf, scanf */
#include <time.h>       /* time_t, struct tm, time, mktime */
 
int main ()
{
    time_t rawtime;
    struct tm * timeinfo;
    int year, month ,day;
    const char * weekday[] = { "周日", "周一","周二", "周三","周四", "周五", "周六"};
 
    /* 用户输入日期 */
    printf ("年: "); fflush(stdout); scanf ("%d",&year);
    printf ("月: "); fflush(stdout); scanf ("%d",&month);
    printf ("日: "); fflush(stdout); scanf ("%d",&day);
 
    /* 获取当前时间信息,并修改用户输入的输入信息 */
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    timeinfo->tm_year = year - 1900;
    timeinfo->tm_mon = month - 1;
    timeinfo->tm_mday = day;
 
    /* 调用 mktime: timeinfo->tm_wday  */
    mktime ( timeinfo );
 
    printf ("那一天是:%sn", weekday[timeinfo->tm_wday]);
 
    return 0;
}

结果:

bash 复制代码
年: 2023
月: 8
日: 14
那一天是:周一

4、gmtime()

struct tm *gmtime(const time_t *timer) 使用 timer 的值来填充 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。北京时间需要在此值的基础上加8小时。

例子:

cpp 复制代码
#include <stdio.h>
#include <time.h>
 
#define BST (+1)
#define CCT (+8)
 
int main ()
{
 
   time_t rawtime;
   struct tm *info;
 
   time(&rawtime);
   /* 获取 GMT 时间 */
   info = gmtime(&rawtime );
   
   printf("当前的世界时钟:n");
   printf("伦敦:%2d:%02dn", (info->tm_hour+BST)%24, info->tm_min);
   printf("中国:%2d:%02dn", (info->tm_hour+CCT)%24, info->tm_min);
 
   return(0);
}

结果:

bash 复制代码
当前的世界时钟:
伦敦:14:10
中国:21:10
相关推荐
Tisfy2 分钟前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
Lsetea4 分钟前
OpenSSL报certificate is not yet valid:error 9与notBefore时间排查
linux·运维·https·ssl证书·openssl
魔法阵维护师4 分钟前
Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理
linux·运维·服务器
Nil2089 分钟前
leetcode 322零钱兑换
算法·leetcode·职场和发展
海绵宝宝转agent14 分钟前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi01125 分钟前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳25 分钟前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
Apipi*33 分钟前
30天速通Linux 第七章进程间通信
linux·运维·服务器
emo_2b42 分钟前
Pycharm配置conda解释器时遇到的问题及解决方法
linux·pycharm·conda
扶风ff1 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word