C语言中存储日期和时间的最好方法是哪一种?

如题所述

方法没有最好,只有适不适合。

选择合适的变量来存储日期和时间是根据应用场景而定的。

C语言标准库中提供了以下有关时间的函数:

    time()函数可以得到一个从1900年1月1日0点0分0秒到目前的秒数

    localtime()函数,将该整数转换为一个时间结构体struct tm中。

    ctime()和asctime()函数,将时间机器数据转换成相应格式的字符串形式。

一般,日期和时间都是用于展示,这样,用字符串变量存储是最合适的方法:

char datetime[32];
time_t t;
struct tm *p;
t=time(NULL);
p=localtime(&t);
strcpy( datetime, asctime(p) );

当需要计算两个时间点之间的时间差时,用整型变量存储时间更为方便:

time_t   t1, t2;
t1=time(NULL);
... //do some work
t2=time(NULL);
printf("diff time t1 and t2=%d seconds\n", t2-t1 );

存储在struct tm中的时间,更方便编程者按具体的要求格式去处理日期数据。

struct tm {
    int tm_sec; /* 秒 – 取值区间为[0,59] */
    int tm_min; /* 分 - 取值区间为[0,59] */
    int tm_hour; /* 时 - 取值区间为[0,23] */
    int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
    int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
    int tm_year; /* 年份,其值等于实际年份减去1900 */
    int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
    int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
    int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-14
存储时间的最好方法完全依赖于存储时间的目的和将要施加到时间值上的操作。下面将举出一些时间的不同用途,分析一下它们将有助于你更好地选择时间的存储方法。 假设你只需要记录事件发生的时间,并且要以“实时”方式记录。换句话说,你想确定某一事件发生的真实时间。你要记录的事件可能包括一个文件的创建。一个长而复杂的程序的开始和结束,或者写完一本书的某一章的时间。在这种情况下,你需要从计算机的系统时钟中取出当前时间并存储起来。较好并且较简单的方法是用一个现成的时间函数取出时间,并且直接按原来的格式存储起来。这种方法基本上不需要你做什么工作。
由于种种原因,你可能不想用标准C函数提供的格式存储时间。你可能想用一种更简单的格式,以使操作更加容易,或者想用不同的方式表示时间。在这种情况下,用一个整数值表示时间是个好办法,这种方法使时间使用起来又快又简单,而且使你可以比较不同的时间,看看哪一个更早。
与处理日期一样,计算时间也可以使用相对的方法,但这些方法很难量化。虽然“午后半小时”并不难量化,但“我吃完午饭后”就很难量化了。尽管这并不是记录时间的最简单的方法,但在有些情况下,这却是唯一的方法。在这些情况下,除了存储描述时间的文本字符串,你别无选择,而此时这也是最好的存储方法。本回答被提问者采纳
相似回答