<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Time.h</id>
	<title>Time.h - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Time.h"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Time.h&amp;action=history"/>
	<updated>2026-07-10T08:48:19Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Time.h&amp;diff=809153&amp;oldid=prev</id>
		<title>imported&gt;Newmangling：​/* 时间日期数据的格式化函数 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Time.h&amp;diff=809153&amp;oldid=prev"/>
		<updated>2021-04-09T03:44:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;时间日期数据的格式化函数&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
| G1=IT&lt;br /&gt;
}}&lt;br /&gt;
{{C_Standard_library}} &amp;lt;!-- to edit this template go to [[template:C Standard library]] --&amp;gt;&lt;br /&gt;
{{lowercase|title=time.h}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time.h&amp;#039;&amp;#039;&amp;#039;是[[C标准函数库]]中获取时间与日期、对时间与日期数据操作及格式化的[[头文件]]。&lt;br /&gt;
&lt;br /&gt;
== 表示时间的三种数据类型 ==&lt;br /&gt;
&lt;br /&gt;
* 日历时间（Calendar Time），是从一个标准&amp;#039;&amp;#039;&amp;#039;时间点&amp;#039;&amp;#039;&amp;#039;（epoch）到现在的时间经过的秒数，不包括插入[[闰秒]]对时间的调整。开始计时的标准时间点，各种编译器一般使用[[协调世界时|UTC]] 1970-01-01 00:00:00。日历时间用数据类型&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;表示。{{R|APUE|page=20}}&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;类型实际上一般是32位整数类型，因此表示的时间不能晚于[[协调世界时|UTC]] 2038-01-18 19:14:07。为此，某些编译器引入了64位甚至更长的整型来保存日历时间，如Visual C++支持&amp;lt;code&amp;gt;__time64_t&amp;lt;/code&amp;gt;数据类型，通过&amp;lt;code&amp;gt;_time64()&amp;lt;/code&amp;gt;函数获取日历时间，可支持到[[协调世界时|UTC]] 3001-01-01 00:00:00的时间。&lt;br /&gt;
* 处理器时间（Processor Time），也被称为[[CPU]]时间（CPU Time），用以度量[[进程]]使用的CPU资源。处理器时间以时钟滴答数（Clock Tick）计算，通常从进程启动开始计时，因此这是相对时间。时钟滴答数用[[系统基本数据类型]]&amp;lt;code&amp;gt;clock_t&amp;lt;/code&amp;gt;来表示，每[[秒钟]]包含&amp;lt;code&amp;gt;CLOCKS_PER_SEC&amp;lt;/code&amp;gt;（time.h中定义的常量，一般为1000）个时钟滴答，也可使用&amp;lt;code&amp;gt;sysconf&amp;lt;/code&amp;gt;函数得到每秒的时钟滴答数。&amp;lt;code&amp;gt;clock_t&amp;lt;/code&amp;gt;类型一般是32位整数类型。{{R|APUE|page=20}}&lt;br /&gt;
* 分解时间(broken-down time)，用结构数据类型&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;表示，&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;包含下列结构成员：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=25%|成员 || 描述&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[[整数 (计算机科学)|int]] tm_hour&amp;lt;/code&amp;gt; || 小时 (0 – 23)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_isdst&amp;lt;/code&amp;gt; || [[夏令时]]启用 (&amp;gt; 0)、禁用 (= 0)、未知 (&amp;lt; 0)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_mday&amp;lt;/code&amp;gt; || 一月中的哪一天 (1 – 31)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_min&amp;lt;/code&amp;gt; || 分 (0 – 59)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_mon&amp;lt;/code&amp;gt; || 月 (0 – 11, 0 = 一月)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_sec&amp;lt;/code&amp;gt; || 秒 (0 – 60, 60 = 闰秒)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_wday&amp;lt;/code&amp;gt; || 一周中的哪一天 (0 – 6, 0 = 周日)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_yday&amp;lt;/code&amp;gt; || 一年中的哪一天 (0 – 365)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int tm_year&amp;lt;/code&amp;gt; || 1900 以来的年数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 从计算机系统时钟获得时间的方法 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;time_t &amp;#039;&amp;#039;&amp;#039;time&amp;#039;&amp;#039;&amp;#039;(time_t* &amp;#039;&amp;#039;timer&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 得到从标准计时点（一般是UTC 1970年1月1日午夜）到当前时间的秒数。&lt;br /&gt;
* &amp;lt;code&amp;gt;clock_t &amp;#039;&amp;#039;&amp;#039;clock&amp;#039;&amp;#039;&amp;#039;(void)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 得到从进程启动到此次函数调用的累计的时钟滴答数。&lt;br /&gt;
&lt;br /&gt;
Windows API提供了更为精确的GetLocalTime()获取毫秒级的日历时间；QueryPerformanceCounter和QueryPerformanceFrequency两个函数获取高于1毫秒的精度。&lt;br /&gt;
&lt;br /&gt;
== 三种时间日期数据类型的转换函数 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;struct tm* &amp;#039;&amp;#039;&amp;#039;gmtime&amp;#039;&amp;#039;&amp;#039;(const time_t* &amp;#039;&amp;#039;timer&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 从日历时间&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;到分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;（[[世界协调时]]UTC）的转换。函数返回的是一个静态分配的&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;结构存储空间，该存储空间被&amp;lt;code&amp;gt;gmtime&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;localtime&amp;lt;/code&amp;gt;与&amp;lt;code&amp;gt;ctime&amp;lt;/code&amp;gt;函数所共用. 这些函数的每一次调用会覆盖这块&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;结构存储空间的内容。&lt;br /&gt;
* &amp;lt;code&amp;gt;struct tm* &amp;#039;&amp;#039;&amp;#039;gmtime_r&amp;#039;&amp;#039;&amp;#039;(const time_t* &amp;#039;&amp;#039;timer&amp;#039;&amp;#039;, struct tm* &amp;#039;&amp;#039;result&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 该函数是&amp;lt;code&amp;gt;gmtime&amp;lt;/code&amp;gt;函数的线程安全版本.&lt;br /&gt;
* &amp;lt;code&amp;gt;struct tm* &amp;#039;&amp;#039;&amp;#039;localtime&amp;#039;&amp;#039;&amp;#039;(const time_t* &amp;#039;&amp;#039;timer&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 从日历时间&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;到分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;的转换，即结果数据已经调整到本地时区与夏令时。&lt;br /&gt;
* &amp;lt;code&amp;gt;time_t &amp;#039;&amp;#039;&amp;#039;mktime&amp;#039;&amp;#039;&amp;#039;(struct tm* &amp;#039;&amp;#039;ptm&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 从基于本地时区(与夏令时)的分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;到日历时间&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;的转换。忽略tm_wday与tm_yday的输入值。如果tm_isdst不确定则输入设为-1。其它各输入域的值可以任意设定，输出时被规范化到正确范围。例如，想要计算2012年的第200天的日期，设为1月200日，函数会输出正确的结果&lt;br /&gt;
* &amp;lt;code&amp;gt;time_t &amp;#039;&amp;#039;&amp;#039;timegm&amp;#039;&amp;#039;&amp;#039;(struct tm* &amp;#039;&amp;#039;brokentime&amp;#039;&amp;#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 从分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;（被视作UTC时间，不考虑本地时区设置）到日历时间&amp;lt;code&amp;gt;time_t&amp;lt;/code&amp;gt;的转换。该函数较少被使用。&lt;br /&gt;
&lt;br /&gt;
== 时间日期数据的格式化函数 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;char *asctime(const struct tm* tmptr)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 把分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;输出到字符串，结果的格式为&amp;quot;Www Mmm dd hh:mm:ss yyyy&amp;quot;，即“周几 月份数 日数 小时数:分钟数:秒钟数 年份数”。函数返回的字符串为静态分配，长度不大于26，与&amp;lt;code&amp;gt;ctime&amp;lt;/code&amp;gt;函数共用。函数的每次调用将覆盖该字符串内容。&lt;br /&gt;
* &amp;lt;code&amp;gt;char* ctime(const time_t* timer)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 把日历时间&amp;lt;code&amp;gt;time_t timer&amp;lt;/code&amp;gt;输出到字符串，输出格式与&amp;lt;code&amp;gt;asctime&amp;lt;/code&amp;gt;函数一样.&lt;br /&gt;
* &amp;lt;code&amp;gt;size_t strftime(char* s, size_t n, const char* format, const struct tm* tptr)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 把分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;转换为自定义格式的字符串，类似于常见的字符串格式输出函数&amp;lt;code&amp;gt;sprintf&amp;lt;/code&amp;gt;。例如：strftime(buf, 64, &amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;, localtime);&lt;br /&gt;
* &amp;lt;code&amp;gt;char * strptime(const char* buf, const char* format, struct tm* tptr)&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;strftime&amp;lt;/code&amp;gt;的逆操作，把字符串按照自定义的格式转换为分解时间&amp;lt;code&amp;gt;tm&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 对时间数据的操作 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;double difftime(time_t timer2, time_t timer1)&amp;lt;/code&amp;gt;&lt;br /&gt;
: 比较两个日历时间之差。&lt;br /&gt;
&lt;br /&gt;
== 源代码示例 ==&lt;br /&gt;
&lt;br /&gt;
打印当前时间到标准输出流：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
# include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    time_t  timer = time(NULL);&lt;br /&gt;
    printf(&amp;quot;ctime is %s\n&amp;quot;, ctime(&amp;amp;timer));&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist|refs=&lt;br /&gt;
&amp;lt;ref name = &amp;quot;APUE&amp;quot;&amp;gt;{{citation|last1=Stevens|first1=W. Richard|last2=Rago|first2=Stephen A.|title=&amp;#039;&amp;#039;Advanced Programming in the UNIX Environment&amp;#039;&amp;#039;|edition=3rd.|url=http://www.apuebook.com|location=United States of America|publisher=[[Pearson Education]], Inc.|year=2013|isbn=978-0-321-63773-4|language=en|accessdate=2021-02-09|archive-date=2014-03-15|archive-url=https://web.archive.org/web/20140315222243/http://www.apuebook.com/|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== 參考來源 ==&lt;br /&gt;
* {{cite book |date=2001-07-06 |title=The GNU C Library Reference Manual |chapter=Calendar Time |url=http://www.gnu.org/software/libc/manual/html_node/Calendar-Time.html |accessdate=2007-04-03 |archive-date=2007-03-28 |archive-url=https://web.archive.org/web/20070328204505/http://www.gnu.org/software/libc/manual/html_node/Calendar-Time.html |dead-url=no }}&lt;br /&gt;
* {{cite book |date=2008-12-09 |title=The Open Group Base Specifications |chapter=gmtime |url=http://www.opengroup.org/onlinepubs/009695399/functions/gmtime.html |access-date=2011-07-01 |archive-date=2010-12-08 |archive-url=https://web.archive.org/web/20101208080611/http://www.opengroup.org/onlinepubs/009695399/functions/gmtime.html |dead-url=no }}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
* [http://en.cppreference.com/w/cpp/chrono/c C++ reference for date/time functions inherited from C]{{Wayback|url=http://en.cppreference.com/w/cpp/chrono/c |date=20110625152710 }}&lt;br /&gt;
&lt;br /&gt;
{{CProLang}}&lt;br /&gt;
[[Category:时间|时间]]&lt;br /&gt;
[[Category:C标准函数库|C标准函数库]]&lt;br /&gt;
[[Category:C语言]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Newmangling</name></author>
	</entry>
</feed>