亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

C標準庫源碼解剖(7):日期與時間函數time.h

2024-07-10 13:27:17
字體:
來源:轉載
供稿:網友

日期與時間函數在time.h中,主要表示處理器時鐘的clock_t類型、表示時間的time_t類型、時鐘每秒滴答數CLOCKS_PER_SEC、描述日歷時間的struct tm結構、函數clock、time、asctime、ctime、gmtime、localtime、mktime、difftime、strftime、wcsftime(寬字符版本),其他的都是非標準擴展。
    1、time.h:類型clock_t, time_t的定義,宏CLOCKS_PER_SEC,struct tm結構包括秒數、分鐘數、小時數、日期數、月份、年份(從1900年算起)、星期、是當年的第幾天、夏時制標志共9個成員。

 

[cpp] view plaincopy
  1. /* ISO C99 Standard: 7.23 日期和時間 <time.h> */  
  2. #ifndef _TIME_H  
  3. #if (! defined __need_time_t && !defined __need_clock_t && /  
  4.      ! defined __need_timespec)  
  5. # define _TIME_H    1  
  6. # include <features.h>  
  7. __BEGIN_DECLS  
  8. #endif  
  9. #ifdef  _TIME_H  
  10. /* 從<stddef.h>中獲得size_t和NULL  */  
  11. # define __need_size_t  
  12. # define __need_NULL  
  13. # include <stddef.h>  
  14. /* 這里定義常量CLOCKS_PER_SEC,為處理器每秒的時鐘滴答數  */  
  15. # include <bits/time.h>  
  16. /* 這里是針對一同常量的過時的POSIX.1-1988中的宏名  */  
  17. # if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K  
  18. #  ifndef CLK_TCK  
  19. #   define CLK_TCK  CLOCKS_PER_SEC  
  20. #  endif  
  21. # endif  
  22. #endif /* <time.h> included  */  
  23. #if !defined __clock_t_defined && (defined _TIME_H || defined __need_clock_t)  
  24. # define __clock_t_defined  1  
  25. # include <bits/types.h>  
  26. __BEGIN_NAMESPACE_STD  
  27. typedef __clock_t clock_t;   /* 定義處理器時鐘類型,clock函數返回該類型 */  
  28. __END_NAMESPACE_STD  
  29. #if defined __USE_XOPEN || defined __USE_POSIX || defined __USE_MISC  
  30. __USING_NAMESPACE_STD(clock_t)  
  31. #endif  
  32. #endif /* clock_t沒有定義,且<time.h>有可能需要clock_t  */  
  33. #undef  __need_clock_t  
  34. #if !defined __time_t_defined && (defined _TIME_H || defined __need_time_t)  
  35. # define __time_t_defined   1  
  36. # include <bits/types.h>  
  37. __BEGIN_NAMESPACE_STD  
  38. typedef __time_t time_t;   /* 定義時間類型,是一個整數類型,time函數返回該類型 */  
  39. __END_NAMESPACE_STD  
  40. #if defined __USE_POSIX || defined __USE_MISC || defined __USE_SVID  
  41. __USING_NAMESPACE_STD(time_t)  
  42. #endif  
  43. #endif /* time_t沒有定義,且<time.h>有可能需要time_t */  
  44. #undef  __need_time_t  
  45. #if !defined __clockid_t_defined && /  
  46.    ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_clockid_t)  
  47. # define __clockid_t_defined    1  
  48. # include <bits/types.h>  
  49. typedef __clockid_t clockid_t; /* 定義表示時鐘ID的類型,clock和timer函數中會用到它 */  
  50. #endif /* clockid_t沒有定義,且<time.h>有可能需要clockid_t  */  
  51. #undef  __clockid_time_t  
  52. #if !defined __timer_t_defined && /  
  53.     ((defined _TIME_H && defined __USE_POSIX199309) || defined __need_timer_t)  
  54. # define __timer_t_defined  1  
  55. # include <bits/types.h>  
  56. typedef __timer_t timer_t;  /* 定義表示時間ID的類型,time_create函數會用到它 */  
  57. #endif /* timer_t沒有,且<time.h>有可能需要timer_t  */  
  58. #undef  __need_timer_t  
  59. #if !defined __timespec_defined &&              /  
  60.     ((defined _TIME_H &&                    /  
  61.       (defined __USE_POSIX199309 || defined __USE_MISC)) || /  
  62.       defined __need_timespec)  
  63. # define __timespec_defined 1  
  64. # include <bits/types.h>  /* 這里為我們定義__time_t  */  
  65. /* POSIX.1b中表示時間值的結構,這類似于struct timeval,但使用納秒而不是微秒 */  
  66. struct timespec  
  67.   {  
  68.     __time_t tv_sec;        /* 秒數  */  
  69.     long int tv_nsec;       /* 納秒數  */  
  70.   };  
  71. #endif /* timespec沒有定義,且<time.h>有可能需要timespec */  
  72. #undef  __need_timespec  
  73. #ifdef  _TIME_H  
  74. __BEGIN_NAMESPACE_STD  
  75. /* 被其他時間函數使用的tm結構  */  
  76. struct tm  
  77. {  
  78.   int tm_sec;           /* 秒數   [0-60] (允許最多1個閏秒) */  
  79.   int tm_min;           /* 分鐘數  [0-59] */  
  80.   int tm_hour;          /* 小時數  [0-23] */  
  81.   int tm_mday;          /* 日期   [1-31] */  
  82.   int tm_mon;           /* 月份   [0-11] */  
  83.   int tm_year;          /* 從1900年起的年份數  - 1900.  */  
  84.   int tm_wday;          /* 星期   [0-6] */  
  85.   int tm_yday;          /* 從1月1日算起的天數 [0-365]   */  
  86.   int tm_isdst;         /* 夏時制標志,1夏時制,0非夏時制,-1不確定 [-1/0/1]*/  
  87. #ifdef  __USE_BSD  
  88.   long int tm_gmtoff;       /* UTC以東的秒數  */  
  89.   __const char *tm_zone;    /* 時區縮寫  */  
  90. #else  
  91.   long int __tm_gmtoff;     /* UTC以東的秒數  */  
  92.   __const char *__tm_zone;  /* 時區縮寫  */  
  93. #endif  
  94. };  
  95. __END_NAMESPACE_STD  
  96. #if defined __USE_XOPEN || defined __USE_POSIX || defined __USE_MISC  
  97. __USING_NAMESPACE_STD(tm)  
  98. #endif  
  99. #ifdef __USE_POSIX199309  
  100. /* POSIX.1b中表示時間初始值和時間間隔的結構  */  
  101. struct itimerspec  
  102.   {  
  103.     struct timespec it_interval;  
  104.     struct timespec it_value;  
  105.   };  
  106. /* 我們可以使用一個簡單的前向聲明  */  
  107. struct sigevent;  
  108. #endif  /* POSIX.1b */  
  109. #ifdef __USE_XOPEN2K  
  110. # ifndef __pid_t_defined  
  111. typedef __pid_t pid_t;  
  112. #  define __pid_t_defined  
  113. # endif  
  114. #endif  
  115. __BEGIN_NAMESPACE_STD  
  116. /* 程序到目前為止的使用時間(用戶時間+系統時間) 
  117.    返回的結果/ClOCKS_PER_SEC即為程序運行的時間(單位為秒) */  
  118. extern clock_t clock (void) __THROW;  
  119. /* 返回當前日歷時間,保存到TIMER中,如果TIMER不為NULL的話  */  
  120. extern time_t time (time_t *__timer) __THROW;  
  121. /* 返回兩個時間TIME1和TIME0的差值(秒數)  */  
  122. extern double difftime (time_t __time1, time_t __time0)  
  123.      __THROW __attribute__ ((__const__));  
  124. /* 返回TP的time_t表示,并且對TP進行規格化  */  
  125. extern time_t mktime (struct tm *__tp) __THROW;  
  126. /* 根據控制串FORMAT對TP進行格式化,并保存到S中,最多寫入MAXSIZE個字符到S中,并返回 
  127.     寫入的字符數,如果字符串長超過MAXSIZE,則返回0 */  
  128. extern size_t strftime (char *__restrict __s, size_t __maxsize,  
  129.             __const char *__restrict __format,  
  130.             __const struct tm *__restrict __tp) __THROW;  
  131. __END_NAMESPACE_STD  
  132. # ifdef __USE_XOPEN  
  133. /* 根據FORMAT解析S,把二進制的時間信息保存到TP中。返回值為指向S中第一個未 
  134.     解析的字符的指針 */  
  135. extern char *strptime (__const char *__restrict __s,  
  136.                __const char *__restrict __fmt, struct tm *__tp)  
  137.      __THROW;  
  138. # endif  
  139. # ifdef __USE_GNU  
  140. /* 與上面兩個函數類似,但從提供的區域設置中獲取信息,而不是用全局的區域設置 */  
  141. # include <xlocale.h>  
  142. extern size_t strftime_l (char *__restrict __s, size_t __maxsize,  
  143.               __const char *__restrict __format,  
  144.               __const struct tm *__restrict __tp,  
  145.               __locale_t __loc) __THROW;  
  146. extern char *strptime_l (__const char *__restrict __s,  
  147.              __const char *__restrict __fmt, struct tm *__tp,  
  148.              __locale_t __loc) __THROW;  
  149. # endif  
  150. __BEGIN_NAMESPACE_STD  
  151. /* 返回TIMER的struct tm表示(為格林尼治標準時間UTC) */  
  152. extern struct tm *gmtime (__const time_t *__timer) __THROW;  
  153. /* 返回TIMER的struct tm表示(為本地時間) */  
  154. extern struct tm *localtime (__const time_t *__timer) __THROW;  
  155. __END_NAMESPACE_STD  
  156. # if defined __USE_POSIX || defined __USE_MISC  
  157. /* 返回TIMER的struct tm表示(為格林尼治標準時間UTC), 
  158.     使用TP來存放結果 */  
  159. extern struct tm *gmtime_r (__const time_t *__restrict __timer,  
  160.                 struct tm *__restrict __tp) __THROW;  
  161. /* 返回TIMER的struct tm表示(為本地時間),使用 
  162.     TP來存放結果 */  
  163. extern struct tm *localtime_r (__const time_t *__restrict __timer,  
  164.                    struct tm *__restrict __tp) __THROW;  
  165. # endif /* POSIX or misc */  
  166. __BEGIN_NAMESPACE_STD  
  167. /* 返回TP的可打印日期與時間字符串,格式為"Day Mon dd hh:mm:ss yyyy/n" */  
  168. extern char *asctime (__const struct tm *__tp) __THROW;  
  169. /* 等價于asctime(localtime (timer))  */  
  170. extern char *ctime (__const time_t *__timer) __THROW;  
  171. __END_NAMESPACE_STD  
  172. # if defined __USE_POSIX || defined __USE_MISC  
  173. /* 上述函數的可重入版本 */  
  174. /* 返回TP的可打印日期與時間字符串,格式為"Day Mon dd hh:mm:ss yyyy/n", 
  175.     存放在BUF中 */  
  176. extern char *asctime_r (__const struct tm *__restrict __tp,  
  177.             char *__restrict __buf) __THROW;  
  178. /* 等價于asctime_r(localtime_r(timer, *TMP*), buf)  */  
  179. extern char *ctime_r (__const time_t *__restrict __timer,  
  180.               char *__restrict __buf) __THROW;  
  181. # endif /* POSIX or misc */  
  182. /* 在localtime.c中已經定義了  */  
  183. extern char *__tzname[2];   /* 當前時區名稱  */  
  184. extern int __daylight;      /* 如果夏時制在使用的話  */  
  185. extern long int __timezone; /* UTC以西的秒數  */  
  186. /* 下面是其他的一些擴展函數 */  
  187. __END_DECLS  
  188. #endif /* <time.h> included.  */  
  189. #endif /* <time.h> not already included.  */  

 

    2、clock函數:返回處理器時間的近似值,用clock_t類型表示,通常以微秒為單位。標準C的clock函數只是處理了一下調用出錯時的情況(返回-1并轉換成clock_t類型)。真正的實現使用的是Linux的clock函數,標準C的clock函數被直接映射到了Linux的clock函數。

 

[cpp] view plaincopy
  1. /* clock.c:clock函數的實現 */  
  2. #include <sys/times.h>  
  3. #include <time.h>  
  4. #include <errno.h>  
  5. /* 返回程序到目前為止的使用時間(用戶時間+系統時間)  */  
  6. clock_t  
  7. clock ()  
  8. {  
  9.   __set_errno (ENOSYS);  
  10.   return (clock_t) -1;  
  11. }  
  12. stub_warning (clock)  
  13. #include <stub-tag.h>  

 

    3、time函數:返回當前日歷時間,用time_t類型表示。time函數與上面的clock函數類似,直接使用Linux的time函數實現(獨自地處理了調用出錯時的情況,即返回-1并轉換成time_t類型)。

 

[cpp] view plaincopy
  1. /* time.c:time函數的實現  */  
  2. #include <errno.h>  
  3. #include <time.h>  
  4. /* 返回當前日歷時間,保存到TIMER中,如果TIMER不為NULL的話  */  
  5. time_t  
  6. time (timer)  
  7.      time_t *timer;  
  8. {  
  9.   __set_errno (ENOSYS);  
  10.   if (timer != NULL)  
  11.     *timer = (time_t) -1;  
  12.   return (time_t) -1;  
  13. }  
  14. libc_hidden_def (time)  
  15. stub_warning (time)  
  16. #include <stub-tag.h>  

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久久久久久| 国产精品大陆在线观看| 欧美最顶级丰满的aⅴ艳星| 2019国产精品自在线拍国产不卡| 国产精品人成电影在线观看| 92版电视剧仙鹤神针在线观看| 国产精品高潮呻吟久久av无限| 亚洲成人精品久久久| 亚洲视频777| 992tv成人免费视频| 久久久人成影片一区二区三区观看| 欧美电影在线观看网站| 性金发美女69hd大尺寸| 精品国产乱码久久久久久天美| 九色精品免费永久在线| 日本成人精品在线| 影音先锋欧美精品| 日韩av在线免费观看一区| 亚洲男人的天堂在线| 成人h视频在线| 亚洲一区国产精品| 91久久精品国产91久久性色| 亚洲国产精品高清久久久| 久久久精品一区二区| 久久夜精品va视频免费观看| 国产综合福利在线| 亚洲一区二区三区视频| 日韩视频第一页| 久久久97精品| 日韩av电影免费观看高清| 亚洲自拍欧美色图| 欧美诱惑福利视频| 精品视频一区在线视频| 日韩免费看的电影电视剧大全| 精品色蜜蜜精品视频在线观看| 亚洲国产精彩中文乱码av在线播放| 国产视频欧美视频| 亚洲精品v欧美精品v日韩精品| 久久久99久久精品女同性| 5566成人精品视频免费| 在线观看成人黄色| 日韩美女免费观看| 不卡av日日日| 亚洲最大中文字幕| 精品免费在线观看| 色综合91久久精品中文字幕| 国产欧美婷婷中文| 色偷偷偷综合中文字幕;dd| 亚洲午夜未满十八勿入免费观看全集| 国产美女久久精品香蕉69| 日韩av在线影视| 亚洲国产成人精品久久| 欧美精品少妇videofree| 2018中文字幕一区二区三区| 久久精品国产电影| 亚洲成人久久久久| 亚洲精品免费在线视频| 亚洲二区在线播放视频| 一区二区三区四区在线观看视频| 日本精品性网站在线观看| 一区二区三区动漫| 亚洲综合中文字幕68页| 欧美激情性做爰免费视频| 91在线观看免费网站| 国产噜噜噜噜久久久久久久久| 久久久久久久久久久国产| 国产精品香蕉av| 亚洲人成电影在线观看天堂色| 欧美大片在线影院| 欧美大片网站在线观看| 少妇激情综合网| 欧美成人中文字幕| 欧美精品免费播放| 97在线视频免费| 国产精品免费一区二区三区都可以| 69影院欧美专区视频| 日韩欧美在线观看视频| 国内精品久久久久久中文字幕| 国产精品热视频| 91久久在线播放| 中文字幕av日韩| 日韩暖暖在线视频| 欧美国产日本在线| 91久久久久久久久久久久久| 亚洲аv电影天堂网| 国产精品亚洲аv天堂网| 日韩av在线网址| 欧美小视频在线观看| 黑人巨大精品欧美一区二区| 日本欧美中文字幕| 欧美激情第一页xxx| 国产精品日韩在线一区| 国产精品久久久久9999| 成人免费在线视频网址| 国产成人在线视频| 欧美国产日韩一区二区| 欧美精品电影免费在线观看| 欧美一级高清免费播放| 91地址最新发布| 中文精品99久久国产香蕉| 成人午夜在线视频一区| 久久综合九色九九| 亚洲精品资源在线| 在线日韩精品视频| 91精品国产色综合| 精品国产一区二区三区久久| 91精品久久久久久久久久入口| 精品久久久久久中文字幕| 欧美成人在线免费| 国产精品白丝av嫩草影院| 亚洲久久久久久久久久久| 国产精品精品一区二区三区午夜版| 国产成人精品久久二区二区91| 欧美极品在线播放| 国产999视频| 国产精品久久久久免费a∨| 清纯唯美亚洲激情| 欧美激情视频一区二区三区不卡| www.国产一区| 精品女厕一区二区三区| 国产不卡av在线免费观看| 91免费的视频在线播放| 国产一区二区久久精品| 欧美日韩中国免费专区在线看| 欧美日韩国产成人在线| 国产欧美中文字幕| 清纯唯美日韩制服另类| 亚洲成人精品在线| 一本色道久久综合狠狠躁篇怎么玩| 欧美综合激情网| 日韩精品在线免费播放| 久久精品国产精品亚洲| 在线观看国产成人av片| 亚洲福利在线视频| 欧美国产日韩二区| 国产精品丝袜高跟| 亚洲成人aaa| 中文字幕亚洲欧美一区二区三区| 日韩成人在线网站| 欧美成人激情视频免费观看| 日韩视频在线免费观看| 国产精品福利网| 在线成人一区二区| 午夜精品www| 欧美日韩黄色大片| 蜜臀久久99精品久久久久久宅男| 国产精品天天狠天天看| 亚洲在线免费视频| 成人做爽爽免费视频| 日韩在线视频观看正片免费网站| 在线精品播放av| 国产日产欧美a一级在线| 不卡在线观看电视剧完整版| 成人www视频在线观看| 亚洲精品一区av在线播放| 57pao国产成人免费| 2019国产精品自在线拍国产不卡| 日韩av123| 亚洲第一区在线观看| 91中文字幕在线观看| 中文字幕久久久| 91精品久久久久久久久久久久久| 欧美日韩午夜视频在线观看| 国产美女被下药99|