iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++中时间库函数的使用详解
  • 195
分享到

C/C++中时间库函数的使用详解

C/C++时间库函数C/C++时间函数C++ 时间函数 2022-11-13 19:11:18 195人浏览 泡泡鱼
摘要

目录C/C++ 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()difftime()C/c++ 获取当前

C/C++ 中时间的概念

Unix 时间戳(Unix timestamp),或称 Unix 时间(Unix time)、POSIX 时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。time_t 就是用来存储该数的一个类型,它是 unsigned long 类型。使用64位二进制数字表示时间的系统,最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒。如果想要更精确一点,可以用结构 struct timeval,它可以精确到微秒:

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

而直接存储年月日时分秒等的是一个结构体:

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;    // 日光节约时间的旗标
};

常用的时间库函数

常用的时间函数都包含在头文件 time.h/ctime(C/C++ 版本)中。

time()

time_t time(time_t *ptr);

该函数返回得到当前日历时间或者设置日历时间,日历时间即自格林威治时间(1970-01-01 00:00:00 UTC)起经过的时间,单位为秒。ptr 是一个指向类型为 time_t 对象的指针。如果 ptr 不为空,则返回值存储在变量 ptr 中。一般给 ptr 传递0或者 NULL 值,如果传递的是非空地址,也能得到当前的日历时间。

time_t t1 = time(0);
time_t t2 = time(NULL);
// 等价语句,三个对象存储的都是同一个数值
time_t t3;
time(&t3);

asctime()

char *asctime(const struct tm *timeptr);

该函数接受一个指向 tm 结构类型常量对象的指针 timeptr,返回一个指向字符串的指针,该字符串包含了可读格式的日期和时间信息 :

w m d h:m:s y

其中,w 表示星期几,m 是以字母表示的月份,d 表示一月中的第几天,h : m : s 表示当前的时间,y 表示年份。asctime 函数常用于将结构中的信息转换为真实世界的时间,以字符串的形式显示。它计算得到的是世界统一时间。世界统一时间比北京时间早八个小时。比如当前北京时间是 8:41,利用 asctime 显示的时间则为 00:41,这意味着日期也有可能会早一天。

gmtime()

struct tm *gmtime(const time_t *timer);

该函数接受一个指向 time_t 类型常量对象的指针 timer,返回一个指向 tm 结构类型的指针。它使用 timer 的值来计算 tm 的各个成员变量,得到的是协调世界时。

ctime()

char *ctime(const time_t *timeptr);

该函数接受一个指向 time_t 类型常量对象的指针 timeptr,返回一个指向字符串的指针,其与 asctime() 的返回类型和格式是一样的。这两个函数的区别在于传入的参数类型不一样,而且 ctime 返回的是本地时区时间。

localtime()

struct tm *localtime(const time_t *timer);

该函数接受一个指向 time_t 类型常量对象的指针 timer,返回一个指向 tm 结构类型的指针。它使用 timer 的值来计算 tm 的各个成员变量,得到的是“本地时区时间”。

mktime()

time_t mktime(struct tm *timeptr)

该函数接受一个指向 tm 结构类型常量对象的指针 timeptr,返回一个 time_t 类型的无符号整数。它的作用是将 timeptr 所指向的结构体变量转换成自格林威治时间(1970-01-01 00:00:00 UTC)起经过的时间并返回,单位为秒,若发生错误返回-1。

strftime()
size_t strftime(
    char *str,
    size_t maxsize,
    const char *fORMat,
    const struct tm *timeptr);

该函数接受一个字符串str、一个无符号整数 maxsize,一个字符串 format 以及一个指向 tm 结构类型常量对象的指针。它的作用是将 timeptr 表示的时间按照格式化规则存储在 str 中,maxsize 用来表示复制到 str 中的最大字符个数。如果 str 的字符个数(包含空字符 ‘\0’)小于 maxsize,则函数返回其字符个数,否则返回0。

size_t 是一个与机器相关的无符号整数类型,其大小足以保证存储内存中的任意对象。例如数组下标的类型、vector 下标的类型实际上都是 size_t。

format 是一个 C 字符串,其中包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由 strftime 函数识别,从而将 tm 中每个成员变量(参考前面 tm 结构中定义的各个整数)替换为相应的格式并存入 str 中。下表为格式说明符:

说明符替换为
%a缩写的星期几名称,例如:Sun
%A完整的星期几名称,例如:Sunday
%b缩写的月份名称,例如:Mar
%B完整的月份名称,例如:March
%c日期和时间表示法,例如:Sun Aug 19 02:56:02 2012
%d一月中的第几天(01-31),例如:19
%F显示年-月-日,例如:09-11-03
%H24 小时格式的小时(00-23),例如:14
%I12 小时格式的小时(01-12),例如:05
%j一年中的第几天(001-366),例如:231
%m十进制数表示的月份(01-12),例如:08
%M十进制表示的分钟数(00-59),例如:55
%pAM 或 PM 名称,例如:PM
%r12小时的时间,例如:9
%R小时和分钟,例如:08:29
%S秒(00-61),例如:02
%U一年中的第几周,以第一个星期日作为第一周的第一天(00-53),例如:33
%w十进制数表示的星期几,星期日表示为 0(0-6),例如:4
%W一年中的第几周,以第一个星期一作为第一周的第一天(00-53),例如:34
%x标准日期串,例如:08/19/12
%X标准时间串,例如:02:50:06
%y年份的最后两个数字(00-99),例如:01
%Y完整的年份,例如:2012
%Z时区的名称或缩写,若得不到时区名称则返回空串,例如:CDT
%%一个 % 符号,例如:%

difftime()

double difftime(time_t time1, time_t time2)

该函数接受两个 time_t 类型的无符号整数并返回它们的差值,单位为秒。

C/C++ 获取当前(本地)时间的方法

方法一

先获取格林威治时间,再使用 localtime 函数获取当前时间的 tm 结构类型变量,将其格式化后存入 str 再打印:

#include <cstdio>
#include <ctime>

int main(void)
{
    time_t t = time(0);
    char str[64];
    strftime(str, sizeof(str), "%Y/%m/%d %X %A 今年第%j天 %z", localtime(&t));
    printf("当前时间:%s", str);

    return 0;
}

方法二

先获取格林威治时间,使用 localtime 函数获取当前时间的 tm 结构类型变量,再将其用 ctime 函数转换成当前时间的字符串打印输出:

#include <cstdio>
#include <ctime>

int main(void)
{
    time_t t = time(0);
    struct tm *info = localtime(&t);

    printf("当前时间:%s", ctime(info));

    return 0;
}

方法三

先获取格林威治时间,使用 localtime 函数获取当前时间的 tm 结构类型变量,然后直接依据 tm 中的成员来计算我们想要打印的内容:

#include <cstdio>
#include <ctime>

int main()
{
    char wday[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    time_t t = time(0);     // 获得time_t结构的时间,世界协调时
    struct tm *p;

    p = localtime(&t);      // 转换为 struct tm 结构的本地时间
    printf("%04d/%02d/%02d ", 1900 + p->tm_year, 1+ p->tm_mon, p->tm_mday);               // 打印当前日期
    printf("%s %02d:%02d:%02d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);    // 打印当前时间

    return 0;
}

方法四

使用 windowsapi,能够精确到毫秒级。但是因为用的是 windows 下的函数,所以换了其他操作系统就不一定能用了:

#include <cstdio>
#include <windows.h>

int main()
{
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    printf("%4d-%02d-%02d %02d:%02d:%02d.%03D 星期%1d",
           sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);

    return 0;
}

方法五

利用系统函数,只显示当前的时间,不显示年月日这些。而且还能直接修改系统时间:

#include <cstdlib>

int main()
{
    system("time");

    return 0;
}

到此这篇关于C/C++中时间库函数的使用详解的文章就介绍到这了,更多相关C/C++时间库函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++中时间库函数的使用详解

本文链接: https://www.lsjlt.com/news/171092.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++中时间库函数的使用详解
    目录C/C++ 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()difftime()C/C++ 获取当前...
    99+
    2022-11-13
    C/C++时间库函数 C/C++时间函数 C++ 时间函数
  • C++时间函数整理详解
    目录一、 时间概念原子时间世界协调时本地时间二、Linux-c时间的存储方式1. time_t2. struct tm三、 常用函数四、 时间格式化五、计时器-时间段六、chrono...
    99+
    2022-11-13
    C++时间函数怎么用 C++时间函数 C++时间
  • C/C++中extern函数使用详解
    目录一、定义和声明的区别二、extern用法2.1 extern 函数2.2 extern 变量2.3 在C++文件中调用C方式编译的函数三、通俗讲解extern一、定义和声明的区别...
    99+
    2024-04-02
  • C++时间函数怎么使用
    这篇文章主要介绍“C++时间函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++时间函数怎么使用”文章能帮助大家解决问题。一、 时间概念格林威治时间GMT(Greenwich Mean ...
    99+
    2023-07-04
  • C语言时间函数之strftime()详解
    strftime函数主要用于时间格式化,它的函数原型如下: size_t __cdecl strftime(char * __restrict__ _Buf,size_t _Size...
    99+
    2024-04-02
  • 详解C++ functional库中的仿函数使用方法
    目录一、仿函数简介二、仿函数简要写法示例三、使用C++自带的仿函数(1)算术仿函数(2)关系仿函数(3)逻辑仿函数一、仿函数简介 仿函数(functor)又称之为函数对象(funct...
    99+
    2024-04-02
  • C语言库函数qsort的使用详解
    目录一、回调函数二、库函数qsort三、使用qsort排序整型数组四、使用qsort排序结构体1、使用qsort排序结构体中的字符成员2、使用qsort排序结构体中的整型成员五、基于...
    99+
    2024-04-02
  • 使用C#中的DateTime.Now函数获取当前时间
    使用C#中的DateTime.Now函数获取当前时间在C#编程中,我们经常需要获取当前的时间。C#中提供了DateTime.Now函数来获取当前的系统时间。下面我将给大家介绍如何使用DateTime.Now函数,并给出具体的代码示例。Dat...
    99+
    2023-11-18
    当前时间 时间获取 C#: DateTimeNow
  • C++ push_back()函数使用详解
    最近在学习Opencv,用C++写程序,做了一个虚拟画笔的项目,即通过摄像头采集视频图像信息,识别视频中的画笔,并画笔在空中的划痕显示在视频图像上。在进行到划痕显示的,由于视频是实时...
    99+
    2024-04-02
  • C语言时间函数之mktime和difftime详解
    目录mktime函数difftime函数总结这两个函数原型如下: __CRT_INLINE time_t __cdecl mktime(struct tm *_Tm); __CR...
    99+
    2024-04-02
  • C++成员函数中const的使用详解
    目录修饰入参值传递址传递const修饰入参修饰返回值修饰函数总结const 在C++中是一个很重要的关键字,其不光可以用来修饰变量,还可以放在函数定义中,这里整理了其在函数中的三个用...
    99+
    2024-04-02
  • C++函数模板的使用详解
    函数模板可以适用泛型来定义函数,其中泛型可以是(int, double, float)等替换。在函数重载过程中,通过将类型作为参数传递给模板,可使编译器自动产生该类型的函数。 工作原...
    99+
    2024-04-02
  • C# String常用函数的使用详解
    目录RemoveSubstring Replace Spilt Join Append Remove Remove(int startIndex) 删除此字符串中从指定位置...
    99+
    2024-04-02
  • C++ 友元函数详解:何时需要使用友元函数?
    友元函数是一种非成员函数,拥有访问私有或受保护成员的权限。使用友元函数可方便实现跨类数据共享、访问私有成员以实现特定功能、允许外部函数访问类私有数据等。 C++ 友元函数详解:何时使用...
    99+
    2024-04-29
    c++ 友元函数 封装性
  • C/C++时间相关的函数有哪些
    本篇内容主要讲解“C/C++时间相关的函数有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/C++时间相关的函数有哪些”吧!首先介绍下C++标准中的chrono库chrono是一个关于时间...
    99+
    2023-06-16
  • 详解C++中的isunordered函数
    所述isunordered()函数定义在<cmath.h>并检查是否第一个参数的值可以有意义与第二个参数进行比较。如果第一个参数不能与第二个参数进行有意义的比较(即一个或...
    99+
    2024-04-02
  • C++中的Lambda函数详解
    目录一 函数语法二 函数应用1、在普通函数中使用2、在qt信号槽中使用3、在std::sort排序函数中的使用三 总结一 函数语法 我们平时调用函数的时候,都是需要被调用函数的函数名...
    99+
    2024-04-02
  • 使用C++Matlab中的lp2lp函数教程详解
    目录1. matlab的lp2lp函数的作用2. matlab的lp2lp函数的使用方法3. C++ 实现3.1 complex.h 文件3.2 lp2lp.h 文件4. 测试结果4...
    99+
    2023-05-17
    C++ Matlab中的lp2lp函数 C++ Matlab lp2lp函数
  • C++11中匿名函数lambda的使用详解
    目录一、lambda基础介绍二、lambda使用例子2.1 STL算法中的回调函数2.2 回调函数2.3 多线程编程三、总结官方介绍: C++ lambda是C++11新增的一种匿名...
    99+
    2023-05-18
    C++11匿名函数lambda使用 C++11匿名函数lambda C++11匿名函数
  • C++中的众数函数详解
    C++中的众数函数详解在统计学中,众数指的是一组数据中出现次数最多的数值。在C++语言中,我们可以通过编写一个众数函数来找到任意一组数据中的众数。众数函数的实现可以采用多种不同的方法,下面将详细介绍其中两种常用的方法。第一种方法是使用哈希表...
    99+
    2023-11-18
    C++ 详解 众数函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作