让你提前认识软件开发(11):localtime与GetLocalTime

第1部分 重新认识C语言

localtime与GetLocalTime

 

【文章摘要】

        在C语言中,有两个获取当前时间的函数:localtimeGetLocalTime。它们在诸如对账一类的程序中应用很广。

本文对localtimeGetLocalTime进行较为详细的介绍,并举例说明它们的用法。

【关键词】

        localtime  GetLocalTime 日期 时间

 

       1.前言

       在C语言中,获取当前系统时间的操作时有发生。例如,在对账程序中,需要在对账文件名中加入当天的日期及时间。一般而言,经常使用的获取当前时间的函数有两个:localtimeGetLocalTime

       本文分别介绍了localtimeGetLocalTime函数,并举例说明了它们的用法。

 

        2. localtimeGetLocalTime函数介绍

        2.1 localtime函数介绍

        功能:把从1970-1-1零点零分(程序中是从1900年开始算的)到当前时间系统所偏移的秒数时间转换为日历时间。

        说明:此函数获得的tm结构体的时间,已经进行过时区转化,成为了本地时间。

        用法:struct tm *localtime(const time_t *clock)

        返回值:返回指向tm结构体的指针。

        tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体,其定义如下:

#ifndef _TM_DEFINED

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; /*从每年的11日开始的天数–取值区间为[0,365],其中0代表11日,1代表12日,以此类推 */

      int tm_isdst; /*夏令时标识符,实行夏令时的时候,tm_isdst为正;不实行夏令时的进候,tm_isdst0;不了解情况时,tm_isdst()为负 */

      long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/

      const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/

};

#define _TM_DEFINED

#endif

 

        2.2 GetLocalTime函数介绍

        函数功能:该函数用来获取当地的当前系统日期和时间。

        函数原型:void GetLocalTime(LPSYSTEMTIME lpSystemTime  // address of system times structure);

        参数说明:

        lpSystemTime:指向一个用户自定义包含日期和时间信息的类型为SYSTEMTIME的变量,该变量用来保存函数获取的时间信息。

        SYSTEMTIME结构体的定义如下:

typedef struct _SYSTEMTIME

{

      WORD wYear;   //

      WORD wMonth;  //

      WORD wDayOfWeek;  //星期,0为星期日,1为星期一,2为星期二……

      WORD wDay;         //

      WORD wHour;        //

      WORD wMinute;      //

      WORD wSecond;      //

      WORD wMilliseconds;  //毫秒

}SYSTEMTIME,*PSYSTEMTIME;

 

       3. localtimeGetLocalTime函数应用举例

       3.1例子程序

      包含localtimeGetLocalTime函数的例子程序如下:

//用于测试时间函数

#include <afxinet.h>

 

typedef signed int  INT32;                       // 重定义数据类型

 

/****************************************************************

*功能描述主函数                                                                                                *

*输入参数                                                                                                         *

*输出参数                                                                                                         *

*返  回 值                                                                                                       *

*其他说明                                                                                                         *

*修改日期        版本号       修改人       修改内容

* ------------------------------------------------------------------------------

* 20140409         V1.0           zzx               创建

****************************************************************/

INT32 main(void)

{

    //用于GetLocalTime输入参数

    INT32 iGetLocalTimeDate = 0;

    INT32 iGetLocalTimeTime = 0;

 

    //用于localtime输入参数

    INT32 iLocalTimeDate = 0;

    INT32 iLocalTimeTime = 0;

 

    time_t now;

    struct tm today;

    SYSTEMTIME sysTime;

 

    //使用GetLocalTime函数获取日期和时间 begin

    {

        GetLocalTime(&sysTime);

        iGetLocalTimeDate = sysTime.wYear * 10000 + sysTime.wMonth * 100 + sysTime.wDay;

        iGetLocalTimeTime = sysTime.wHour * 10000 + sysTime.wMinute * 100 + sysTime.wSecond;

    }

    //使用GetLocalTime函数获取日期和时间 end

 

    //使用localtime函数获取日期和时间 begin

    {

        time(&now);       

        today = *localtime(&now);

        iLocalTimeDate = (1900 + today.tm_year) * 10000 + (1 + today.tm_mon) * 100 + today.tm_mday;

        iLocalTimeTime = today.tm_hour * 10000 + today.tm_min * 100 + today.tm_sec;

    }

    //使用localtime函数获取日期和时间 end

 

    //先比较日期

   if (iGetLocalTimeDate == iLocalTimeDate)

    {

        printf("The date is the same, it is %04d%02d%02d.\n", sysTime.wYear, sysTime.wMonth, sysTime.wDay);

    }

    else

    {

        printf("The date is not the same. In UseGetLocalTime(), it is %d. In UseLocalTime(), it is %d.\n", iGetLocalTimeDate, iLocalTimeDate);

    }

 

    //再比较时间

    if (iGetLocalTimeTime == iLocalTimeTime)

    {

        printf("The time is the same, it is %02d:%02d:%02d.\n", sysTime.wHour, sysTime.wMinute, sysTime.wSecond);

    }

    else

    {

        printf("The time is not the same. In UseGetLocalTime(), it is %d. In UseLocalTime(), it is %d.\n", iGetLocalTimeTime, iLocalTimeTime);

    }

 

    printf("Local time is %s", asctime(&today));

    printf("It is the %d day of week.\n", sysTime.wDayOfWeek);

 

    return 0;

}

 

         3.2程序说明

        本例子程序包含如下操作:

        (1)GetLocalTime函数获取当前日期和时间,其中日期存放在变量iGetLocalTimeDate(格式为:yyyymmdd),时间存放在变量iGetLocalTimeTime(格式为:hhmmss)

        (2)localtime函数获取当前日期和时间,其中日期存放在变量iLocalTimeDate(格式为:yyyymmdd),时间存放在变量iLocalTimeTime(格式为:hhmmss)

        (3)比较用这两个函数获得的日期和时间是否相同。若相同,则将日期和时间分别打印出来;若不相同,则分别将用这两个函数获得的日期和时间打印出来。

        (4)asctime函数转换日期和时间为相应的ASCII码,返回字符串格式为:星期,月,日,小时,分,秒,年。

        (5)调用sysTime.wDayOfWeek打印当前日期是一周中的第几天。

 

         3.3程序输出

        本例子程序的输出结果如下:

 

        4.总结

      “条条大路通罗马”,要做成功一件事情,我们可能会有很多种方法。

       在C语言中,常用的获取当前时间的函数有localtime和GetLocalTime两个。经过程序测试表明,只要用法正确,它们获取的日期和时间结果就是相同的。

 

 

(欢迎访问南邮BBS:http://bbs.njupt.edu.cn/)
(欢迎访问重邮BBS:
http://bbs.cqupt.edu.cn/nForum/index)

(本系列文章每周更新两篇,敬请期待!本人新浪微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

 

 

你可能感兴趣的:(让你提前认识软件开发(11):localtime与GetLocalTime)