在VC6.0环境下如何获得当前时间与日期,该包含哪个文件,具体调用 哪个函数

在VC6.0环境下如何获得当前时间与日期,该包含哪个文件,具体调用 哪个函数,第1张

CTime time;

time = CTime::GetCurrentTime ();

CString strTime = timeFormat ("%m月%d日%H:%M");

include afxh

===============================

CTime没有基类。

一个CTime对象代表一个绝对的时间和日期。CTime类引入了ANSI time_t数据类型以及其相关的运行时函数,其中包括向或自一个Gregorian日期和24-小时时间的转换功能。

CTime值是基于世界标准时间(UCT)的,UCT时间等于格林威治(Greenwich)时间(GMT)。本地时区是由TZ环境变量控制的。

当创建一个CTime时,将nDST参数设置为0表示有效的是标准时间,或将其设置为大于0表示有效的白天保留时间,将其设置为小于零的值表示由C运行时库代码来计算有效的是标准时间还是白天保留时间。如果没有设置这个参数,则它的值是不明确的,而从mktime返回的值是不可预知的。如果timeptr指向一个由先前调用asctime,gmtime,或localtime返回的tm结构,则tm_isdst域包含了适当的值。

参见“Microsoft Visual C++ 60参考库”的“Microsoft Visual C++ 60运行时参考库”卷可以获得有关time_t数据类型和CTime使用的运行时函数的更多信息。与CTime类对应的类是CTimeSpan类,它代表了一段时间间隔——两个CTime对象之间的差值。

CTime和CTimeSpan类都是不可派生的。因为没有虚函数,CTime和CTimeSpan对象的大小都正好是四个字节。多数成员函数都是内联函数。

CTime time = CTime::GetCurrentTime() ;

GetCurrentTime() 是CTime 的静态成员函数返回一个 CTime 类型的对象,CTime再转化为CString。

这样就行了

SYSTEMTIME systm;

GetSystemTime(&systm);

参数结构体

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME, PSYSTEMTIME;

不用再多解释了吧?挺容易看明白的

CTime timer;

timer=CTime::GetCurrentTime();

CString str;

int h = timerGetHour();

int m = timerGetMinute();

int s = timerGetSecond();

strFormat("%d:%d:%d",h,m,s);

UpdateData(true);

m_Timer = str;

UpdateData(false);

对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。 在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。 本文要介绍的,是另一种直接利用Pentium CPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于《Windows图形编程》一书,第 15页-17页,有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论,可以参考Intel产品手册。本文仅仅作抛砖之用。 在 Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高,因此这个部件可以达到纳秒级的计时精度。这个精确性是上述两种方法所无法比拟的。 在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样: inline unsigned __int64 GetCycleCount() { __asm RDTSC } 但是不行,因为RDTSC不被C++的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31,如下: inline unsigned __int64 GetCycleCount() { __asm _emit 0x0F __asm _emit 0x31 } 以后在需要计数器的场合,可以像使用普通的Win32 API一样,调用两次GetCycleCount函数,比较两个返回值的差,像这样: unsigned long t; t = (unsigned long)GetCycleCount(); //Do Something time-intensive t -= (unsigned long)GetCycleCount(); 《Windows图形编程》第15页编写了一个类,把这个计数器封装起来。有兴趣的读者可以去参考那个类的代码。作者为了更精确的定时,做了一点小小的改进,把执行RDTSC指令的时间,通过连续两次调用GetCycleCount函数计算出来并保存了起来,以后每次计时结束后,都从实际得到的计数中减掉这一小段时间,以得到更准确的计时数字。但我个人觉得这一点点改进意义不大。在我的机器上实测,这条指令大概花掉了几十到100多个周期,在 Celeron 800MHz的机器上,这不过是十分之一微秒的时间。对大多数应用来说,这点时间完全可以忽略不计;而对那些确实要精确到纳秒数量级的应用来说,这个补偿也过于粗糙了。 这个方法的优点是: 1高精度。可以直接达到纳秒级的计时精度(在1GHz的CPU上每个时钟周期就是一纳秒),这是其他计时方法所难以企及的。 2 成本低。timeGetTime

#include <timeh>

// 方法一

 time_t tt = time(NULL);//这句返回的只是一个时间cuo

 tm t= localtime(&tt);

 printf("%d-%02d-%02d %02d:%02d:%02d\n", 

  t->tm_year + 1900,

  t->tm_mon + 1,

  t->tm_mday,

  t->tm_hour,

  t->tm_min,

  t->tm_sec);

// 方法二

 SYSTEMTIME st = {0};

 GetLocalTime(&st);

 printf("%d-%02d-%02d %02d:%02d:%02d\n", 

  stwYear,

  stwMonth,

  stwDay,

  stwHour,

  stwMinute,

  stwSecond);

VOID

GetSystemTime

(

LPSYSTEMTIME

lpSystemTime

//

address

of

system

time

structure

);

函数就可以获得了,其中LPSYSTEMTIME

是个

结构体

含:年,月,日,

周几

,小时,分,秒,毫秒。

以上就是关于在VC6.0环境下如何获得当前时间与日期,该包含哪个文件,具体调用 哪个函数全部的内容,包括:在VC6.0环境下如何获得当前时间与日期,该包含哪个文件,具体调用 哪个函数、VC怎么获取当前日期时间并存储到字符串中、怎么用Vc++获取时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9451084.html

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

发表评论

登录后才能评论

评论列表(0条)

保存