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

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

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

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

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()为负。*/

}

select a.cpsn_num as 人员编码,b.vschool as 毕业学校

from hr_hi_person a

left join

(

select *, row_number() over(partition by cpsn_num order by dgrduateDate desc) as rowNum from hr_hi_edu

)b

on a.cpsn_num =b.cpsn_num and b.rowNum=1

Datetime:

时间格式,对应于数据库中的DateTime类型,对应于.NET里面的System.

DateTime类型。DateTime支持日期从1753年1月1日到9999年12月31日,时间部分的精确度是3.33毫秒,它需要8字节的存储空间。

Datetime2:

时间格式,就Sql

Server

2008

里面新增的字段类型。对应于数据库中的DateTime2格式,对应于.NET里面的System.

DateTime类型。DateTime2则支持从0001年01月01日到9999年12月31日,时间部分的精度是100纳秒,占用6到8字节的存储空间,取决于存储的精度。

datetime2数据类型,类似于之前的datetime类型,不过其精度比较高,可以精确到小数点后面7位(100ns)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10858327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存