国酱 發表於 2024-1-14 00:00:00

Linux下用C获取当前时间

<p>
        Linux下用C获取当前时间,具体如下:</p>
<p>
        <strong>代码(可以把clock_gettime换成time(NULL))</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_377180">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp keyword bold">void</code> <code class="cpp plain">getNowTime()</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">timespec </code><code class="cpp functions bold">time</code><code class="cpp plain">;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">clock_gettime(CLOCK_REALTIME, &amp;</code><code class="cpp functions bold">time</code><code class="cpp plain">); </code><code class="cpp comments">//获取相对于1970到现在的秒数</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">tm</code> <code class="cpp plain">nowTime;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">localtime_r(&amp;</code><code class="cpp functions bold">time</code><code class="cpp plain">.tv_sec, &amp;nowtime);</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">char</code> <code class="cpp plain">current;</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">sprintf</code><code class="cpp plain">(current, </code><code class="cpp string">"%04d%02d%02d%02d:%02d:%02d"</code><code class="cpp plain">, nowTime.tm_year + 1900, nowTime.tm_mon, nowTime.tm_mday, </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        分析:</p>
<p>
        <strong>clock_gettime()</strong></p>
<p>
         函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。</p>
<p>
        语法:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_877540">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include&lt;time.h&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                         </div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">clock_gettime(clockid_t clk_id,</code><code class="cpp keyword bold">struct</code> <code class="cpp plain">timespec *tp);</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        参数:</p>
<p>
        clk_id : 检索和设置的clk_id指定的时钟时间。</p>
<p>
        CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变</p>
<ul>
<li>
                  CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响</li>
        <li>
                  CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间</li>
        <li>
                  CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间</li>
</ul>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_886172">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp keyword bold">struct</code> <code class="cpp plain">timespec</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                         </div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                         </div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp color1 bold">time_t</code> <code class="cpp plain">tv_sec; </code><code class="cpp comments">/* 秒*/</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                         </div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp color1 bold">long</code> <code class="cpp plain">tv_nsec; </code><code class="cpp comments">/* 纳秒*/</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                         </div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp plain">};</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>localtime()</strong></p>
<p>
        localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间.</p>
<p>
        语法</p>
<p>
        说明:此函数获得的tm结构体的时间是日历时间。</p>
<p>
        用 法: struct tm *localtime(const time_t *clock);</p>
<p>
        返回值:返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.</p>
<p>
        例1:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_752901">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;stdio.h&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;stddef.h&gt;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;time.h&gt;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">main(</code><code class="cpp keyword bold">void</code><code class="cpp plain">)</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">timer;</code><code class="cpp comments">//time_t就是long int 类型</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code> <code class="cpp plain">*tblock;</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">timer = </code><code class="cpp functions bold">time</code><code class="cpp plain">(NULL);</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">tblock = </code><code class="cpp functions bold">localtime</code><code class="cpp plain">(&amp;timer);</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"Local time is: %s\n"</code><code class="cpp plain">, </code><code class="cpp functions bold">asctime</code><code class="cpp plain">(tblock));</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">return</code> <code class="cpp plain">0;</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        执行结果:</p>
<p>
        Local time is: Mon Feb 16 11:29:26 2009</p>
<p>
        例2:</p>
<p>
        上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_767564">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include&lt;time.h&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp preprocessor">#include&lt;stdio.h&gt;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">main()</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp plain">{</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code> <code class="cpp plain">*t;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">tt;</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">time</code><code class="cpp plain">(&amp;tt);</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">t = </code><code class="cpp functions bold">localtime</code><code class="cpp plain">(&amp;tt);</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%4d年%02d月%02d日 %02d:%02d:%02d\n"</code><code class="cpp plain">, t-&gt;tm_year + 1900, t-&gt;tm_mon + 1, t-&gt;tm_mday, t-&gt;tm_hour, t-&gt;tm_min, t-&gt;tm_sec);</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">return</code> <code class="cpp plain">0;</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>localtime()与localtime_r()的区别</strong></p>
<p>
        localtime():</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_589778">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;cstdlib&gt; </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;iostream&gt; </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;time.h&gt; </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;stdio.h&gt; </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp keyword bold">using</code> <code class="cpp keyword bold">namespace</code> <code class="cpp plain">std; </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">main(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">argc, </code><code class="cpp color1 bold">char</code> <code class="cpp plain">*argv[]) </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp plain">{ </code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">tNow =</code><code class="cpp functions bold">time</code><code class="cpp plain">(NULL); </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">tEnd = tNow + 1800; </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp comments">//注意下面两行的区别 </code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code><code class="cpp plain">* ptm = </code><code class="cpp functions bold">localtime</code><code class="cpp plain">(&amp;tNow); </code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code><code class="cpp plain">* ptmEnd = </code><code class="cpp functions bold">localtime</code><code class="cpp plain">(&amp;tEnd); </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">char</code> <code class="cpp plain">szTmp = {0}; </code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">strftime</code><code class="cpp plain">(szTmp,50,</code><code class="cpp string">"%H:%M:%S"</code><code class="cpp plain">,ptm); </code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">char</code> <code class="cpp plain">szEnd = {0}; </code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">strftime</code><code class="cpp plain">(szEnd,50,</code><code class="cpp string">"%H:%M:%S"</code><code class="cpp plain">,ptmEnd); </code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="cpp spaces">  </code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s /n"</code><code class="cpp plain">,szTmp); </code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s /n"</code><code class="cpp plain">,szEnd); </code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="cpp spaces">  </code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">system</code><code class="cpp plain">(</code><code class="cpp string">"PAUSE"</code><code class="cpp plain">); </code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">return</code> <code class="cpp plain">EXIT_SUCCESS; </code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        最后出来的结果是:</p>
<p>
        21:18:39</p>
<p>
        21:18:39</p>
<p>
        和最初想法不一致。</p>
<p>
        查阅localtime的文档,发现这段话:</p>
<p>
        This structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.</p>
<p>
        也就是说每次只能同时使用localtime()函数一次,要不就会被重写!</p>
<p>
        The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.</p>
<p>
        因此localtime()不是可重入的。同时libc里提供了一个可重入版的函数localtime_r();</p>
<p>
        Unlike localtime(), the reentrant version is not required to set tzname。</p>
<p>
        修改程序:(localtime_r())</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_304450">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;cstdlib&gt; </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;iostream&gt; </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp preprocessor">#include &lt;time.h&gt; </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp preprocessor">#include &lt;stdio.h&gt; </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp keyword bold">using</code> <code class="cpp keyword bold">namespace</code> <code class="cpp plain">std; </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp color1 bold">int</code> <code class="cpp plain">main(</code><code class="cpp color1 bold">int</code> <code class="cpp plain">argc, </code><code class="cpp color1 bold">char</code> <code class="cpp plain">*argv[]) </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp plain">{ </code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">tNow =</code><code class="cpp functions bold">time</code><code class="cpp plain">(NULL); </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">time_t</code> <code class="cpp plain">tEnd = tNow + 1800; </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp comments">//在这里修改程序 </code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp comments">//struct tm* ptm = localtime(&amp;tNow); </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp comments">//struct tm* ptmEnd = localtime(&amp;tEnd); </code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code> <code class="cpp plain">ptm = { 0 }; </code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code> <code class="cpp plain">ptmEnd = { 0 }; </code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">localtime_r(&amp;tNow, &amp;ptm); </code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp plain">localtime_r(&amp;tEnd, &amp;ptmEnd); </code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="cpp spaces">  </code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">char</code> <code class="cpp plain">szTmp = {0}; </code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">strftime</code><code class="cpp plain">(szTmp,50,</code><code class="cpp string">"%H:%M:%S"</code><code class="cpp plain">,&amp;ptm); </code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp color1 bold">char</code> <code class="cpp plain">szEnd = {0}; </code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">strftime</code><code class="cpp plain">(szEnd,50,</code><code class="cpp string">"%H:%M:%S"</code><code class="cpp plain">,&amp;ptmEnd); </code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s /n"</code><code class="cpp plain">,szTmp); </code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"%s /n"</code><code class="cpp plain">,szEnd); </code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="cpp spaces">  </code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="cpp spaces"> </code><code class="cpp functions bold">system</code><code class="cpp plain">(</code><code class="cpp string">"PAUSE"</code><code class="cpp plain">); </code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="cpp spaces"> </code><code class="cpp keyword bold">return</code> <code class="cpp plain">EXIT_SUCCESS; </code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        最后出来的结果是:</p>
<p>
        10:29:06<br>
        10:59:06</p>
<p>
        <strong>tm</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_421399">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp keyword bold">struct</code> <code class="cpp color1 bold">tm</code> <code class="cpp plain">{</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_sec;  </code><code class="cpp comments">/* 秒 – 取值区间为 */</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_min;  </code><code class="cpp comments">/* 分 - 取值区间为 */</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_hour;  </code><code class="cpp comments">/* 时 - 取值区间为 */</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_mday;  </code><code class="cpp comments">/* 一个月中的日期 - 取值区间为 */</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_mon;  </code><code class="cpp comments">/* 月份(从一月开始,0代表一月) - 取值区间为 */</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_year;  </code><code class="cpp comments">/* 年份,其值等于实际年份减去1900 */</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_wday; </code><code class="cpp comments">/* 星期 – 取值区间为,其中0代表星期天,1代表星期一 */</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_yday; </code><code class="cpp comments">/* 从每年1月1日开始的天数– 取值区间,其中0代表1月1日 */</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces">    </code><code class="cpp color1 bold">int</code> <code class="cpp plain">tm_isdst; </code><code class="cpp comments">/* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">};</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>time 函数</strong></p>
<p>
        返回:1970-1-1, 00:00:00以来经过的秒数</p>
<p>
        原型: time_t time(time_t *calptr) </p>
<p>
        结果可以通过返回值,也可以通过参数得到,见实例</p>
<p>
        头文件 &lt;time.h&gt;</p>
<p>
        返回值: </p>
<p>
        成功:秒数,从1970-1-1,00:00:00 可以当成整型输出或用于其它函数</p>
<p>
        失败:-1</p>
<p>
        例:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_482238">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp color1 bold">time_t</code> <code class="cpp plain">now;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp functions bold">time</code><code class="cpp plain">(&amp;now);</code><code class="cpp comments">// 等同于now = time(NULL)</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp functions bold">printf</code><code class="cpp plain">(</code><code class="cpp string">"now time is %d\n"</code><code class="cpp plain">, now);</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
        原文链接:http://www.cnblogs.com/fnlingnzb-learner/p/5985822.html</p>
頁: [1]
查看完整版本: Linux下用C获取当前时间