`
tomhibolu
  • 浏览: 1430793 次
文章分类
社区版块
存档分类
最新评论

C、C++时间与日期函数

 
阅读更多
  • 由于自己实际工作学习中没怎么用时间和日期的函数,在看Unix环境高级编程6.10节和Python的time模块时,总感觉这些东西总是连不成串。

还是从C开始理一理吧。翻翻C标准(C++中的东西我看不懂),相关的也就是time.h这个东西了。

NULL CLOCKS_PER_SEC

类型

size_t clock_t time_t

结构体

tm

函数

asctime clock difftime localtime strftime
ctime gmtime mktime time

走马观花

暂时抛开和clock相关的东西。只看字面上和time直接相关的东西。


获取时间

如何从操作系统获取时间呢?

time_t time(time_t *t);

该函数返回从某个时间点(epoch)到现在为止所经过的秒数。(这个数称为日历时间)比如:

1319206097
  • (一般情况下这个时间点都是公元1970年1月1日0时,但是微软的C/C++编译器版本7中用的却是1899年12月31日0时,注意,编译器的版本不是MVSC的版本,比如MSVC2010也叫VC9,但对应的编译器版本是16)

这个数字对人来说可真不友好。比如上面这个对应的具体日期是什么,如果不是我写的我还真不知道

转成字符串

char *ctime(const time_t *timep);

我们知道,同一时刻各个时区的时间是不同的。这个函数会考虑当前的时区(通过环境变量TZ)

Fri Oct 21 22:08:17 2011\n\0

这下好看多了,但还是很不够...

分解时间,结构体 tm

我们可以将日历时间,转成包含时分秒等信息的结构体。这样处理起来就方面多了。

struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
  • 注意:返回的tm结构体的指针,指向的是其内部的一个静态tm结构体变量。

gmtime
格林威治时间

localtime
本地时间(东8区)

17

17

8

8

14

22

21

21

21日

9

9

10月(从0开始算)

111

111

2011年(从1900开始)

5

5

周五

293

293

一年中的第293天

0

0

不是夏时制

要从分解时间转换会日历时间,则使用

time_t mktime(struct tm *tm);

转成字符串2

前面的ctime可以从日历时间转成字符串,那么从分解时间如何转成字符串呢?

char *asctime(const struct tm *tm);

比如:前面的gmtime和localtime得到的分解时间,分别对应

Fri Oct 21 14:24:34 2011
Fri Oct 21 22:24:34 2011

不过这个东西太死板了吧,想自定义字符串怎么办?

size_t strftime(char *s, size_t max, const char *format,
                const struct tm *tm);

和printf类似,有一大堆转换符可用,这样一来,我们可以得到

Fri
Friday
2011-10-21
10:24:34 PM
...

类型

简单罗列一下:

time_t

一个整数类型,但具体的范围和精度是由编译器实现所定义的。

struct tm

结构体tm 表示分解时间(broken-down time)

structtm{

inttm_sec;

inttm_min;

/* 分钟: [0 - 59] */

inttm_hour;

/* 小时: [0 - 23] */

inttm_mday;

/* 日: [1 - 31] */

inttm_mon;

/* 月: [0 - 11] */

inttm_year;

/* 年: 从1900年开始算起 */

inttm_wday;

/* 星期X: [0 - 6] */

inttm_yday;

/* 一年中第X天: [0 - 365] */

inttm_isdst;

/* 夏时制标记: <0, 0, >0 */

};

夏时值,即:日光节约时制(Daylight Saving Time)

clock_t

clock_t clock(void);

返回程序自开始执行到目前为止所占用的处理机时间。如果处理机时间不可使用,那么返回-1。clock()/CLOCKS_PER_SEC是以秒为单位表示的时间。

其他

Unix

在Unix下,与time()相比,

int gettimeofday(struct timeval *tv, struct timezone *tz);

可以获得更高的分辨率(最高为微秒)。

QThread::sleep()在unix下的实现使用该函数。

python的time模块中的time()/sleep()也使用该函数。

locale

函数strftime()生成的字符串受locale中的LC_TIME影响


分享到:
评论

相关推荐

    c/c++中的日期处理函数详解

    C/C++中的日期处理函数详解 C/C++中的日期处理函数是Linux系统中处理日期和时间的重要组件。...日期处理函数是C/C++中处理日期和时间的重要组件,通过了解这些函数和数据结构,可以更好地处理日期和时间相关的任务。

    c语言常用时间函数

    时间函数是C/C++语言中对日期和时间操作的基础概念。在C/C++中,时间函数主要用于获取、计算和显示时间。下面将详细介绍C/C++中时间函数的概念、类型、函数和使用方法。 概念: * Coordinated Universal Time(UTC...

    c 与 c++中的time相关函数

    在本文中,我们将从基础概念入手,探讨在 C/C++ 中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。 1.时间相关函数的分类 time 相关函数可以分为三类:...

    C、C++函数集(速查).pdf

    6. 时间和日期函数: - time():获取当前日历时间。 - ctime()、localtime():转换时间值为可读字符串形式。 - strftime():按照指定格式格式化时间。 7. 进程控制函数: - chdir():改变当前工作目录。 - ...

    C-C++中的System函数

    ### C-C++中的System函数详解 ...通过`system`函数,C和C++程序员能够轻松地与操作系统进行交互,执行各种实用的命令。然而,在享受便利的同时,也要注意相关的安全问题,以确保程序的安全性和稳定性。

    c、c++中的时间函数

    在C和C++编程语言中,时间函数是一个重要的部分,特别是在需要进行计时、日志记录、性能测试或实现时间相关的功能时。本篇文章将深入探讨C和C++中的时间函数,以及如何在Windows环境下使用它们。 首先,我们需要...

    c与c++标准类库及函数中文版

    5. 时间和日期:`time.h`提供时间相关的函数,如获取当前时间、时间间隔计算等。 6. 错误处理:`errno.h`定义了错误代码,`perror`函数用于打印错误信息。 7. 文件操作:`fopen`、`fclose`等函数在`stdio.h`中定义,...

    C与C++库函数速查手册.rar

    《C与C++库函数速查手册》是一个非常实用的资源,对于正在学习或已经从事C/C++编程的开发者来说,是一份极具价值的参考工具。这份手册详细列举了C和C++标准库中的各种函数,帮助程序员快速查找并理解其功能、用法和...

    C C++ Linux函数手册大全

    在C语言部分,手册将深入解析标准库中的各种函数,包括基本数据类型操作、内存管理、输入/输出流、字符串处理、数学运算、时间日期处理等。例如,`printf`和`scanf`函数用于格式化输入输出,`malloc`和`free`用于...

    C/C++时间函数使用方法

    C/C++时间函数的使用是编程中常见的需求,特别是在处理定时任务、性能分析或日志记录时。在C和C++中,我们通常利用`&lt;ctime&gt;`或`&lt;time.h&gt;`头文件提供的函数来操作时间。本文将详细介绍如何在C/C++中获取、操作和显示...

    C/C++ 标准库函数 (中文版)

    标准C库中包含丰富的函数,如标准I/O函数用于执行输入输出操作,标准字符串函数用于处理C风格的字符串,标准数学函数提供数学计算功能,标准时间日期函数用于处理时间日期数据,标准内存函数用于动态内存分配和释放...

    C++之python函数调用

    Python C API提供了一系列的C接口,允许C/C++代码直接与Python解释器交互,执行Python脚本、调用Python函数等。 在给定的代码中,我们看到了如何在C++中调用Python函数的几个关键步骤: 1. **Python解释器初始化**...

    C,C++函数集

    **第3章:时间日期函数** 1. **_ftime**:获取当前系统时间,并存储在一个`TIME`结构体中。 2. **_strdate, _strtime**:将日期和时间格式化为字符串。 3. **_asctime**:将`tm`结构体表示的时间转换为可读字符串。...

    C++获取当前时间精确到毫秒Ms

    首先,C++标准库提供了一个名为`&lt;chrono&gt;`的头文件,它包含了处理时间和日期的工具。获取当前时间的最基础类是`std::chrono::system_clock`,它提供了一个静态成员函数`now()`来获取当前系统时间。但是,这个函数...

    C、C++常用头文件及函数汇总

    17. **`&lt;ctime&gt;`**:日期和时间处理,与C中的`&lt;time.h&gt;`类似。 18. **`&lt;cwchar&gt;`**:宽字符处理,与C中的`&lt;wchar.h&gt;`类似。 19. **`&lt;cwctype&gt;`**:宽字符分类,与C中的`&lt;wctype.h&gt;`类似。 20. **`&lt;deque&gt;`**:...

    c/c++语句大全;c/c++函数大全

    ### C/C++ 语句与函数大全解析 #### 概述 C 和 C++ 是两种广泛使用的编程语言,尤其在系统编程、游戏开发、嵌入式系统等领域具有不可替代的地位。掌握这两种语言的关键之一就是熟悉它们提供的各种内置函数。本文将...

    C++获取时间(Dev-C++可完美运行)

    这个简单的程序对于初学者来说是一个很好的学习起点,它展示了如何将C++与操作系统的时间功能相结合。 首先,我们需要引入`&lt;ctime&gt;`头文件,这个头文件包含了处理时间相关的函数和类型定义。`&lt;ctime&gt;`是C++对C语言...

    C++函数库大全

    随着C99标准的引入,新增了一些函数库,以增强C/C++语言的功能。 1. **complex.h**:提供了复数的运算支持,包括复数的创建、加减乘除等基本运算。 2. **fenv.h**:提供了对浮点环境的控制能力,可以用于处理...

    C,C++函数查询词典

    7. 时间日期函数:`time`, `ctime`, `localtime`等,用于获取和处理时间信息。 8. 格式化函数:`strftime`和`strptime`用于格式化和解析日期和时间。 9. 异常处理:C++支持异常处理机制,通过`try`, `catch`, `...

    C++获取网络时间

    在C++编程中,获取网络时间是一项常见的任务,特别是在需要精确同步系统时钟或与远程服务器进行时间同步的场景下。MFC(Microsoft Foundation Classes)是C++的一个库,提供了丰富的用户界面和系统功能,包括网络...

Global site tag (gtag.js) - Google Analytics