C语言获取系统时间的几种方式 !

C语言中如何获取时间?精度如何?
1 使用time_t time( time_t * timer ) 精确到秒
2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒
3 计算时间差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精确到毫秒
5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒
6 要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
获取系统的计数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
7 Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
//*********************************************************************
//用标准C实现获取当前系统时间的函数

一.time()函数

time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。
#include "time.h"
void main ()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "\007The current date/time is: %s", asctime (timeinfo) );
exit(0);
}
=================

#include -- 必须的时间函数头文件
time_t -- 时间类型(time.h 定义是typedef long time_t;追根溯源,time_t是long)

struct tm -- 时间结构,time.h 定义如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
time ( &rawtime ); -- 获取时间,以秒计,从1970年1月一日起算,存于rawtime
localtime ( &rawtime ); -- 转为当地时间,tm 时间结构
asctime ()-- 转为标准ASCII时间格式:
星期 月 日 时:分:秒 年

-----------------------------------------------------------------------------
二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
clock_t clock ( void );
#include
clock_t t = clock();
long sec = t / CLOCKS_PER_SEC;
他是记录时钟周期的,实现看来不会很精确,需要试验验证;
---------------------------------------------------------------------------
三.gettime(&t); 据说tc2.0的time结构含有毫秒信息
#include
#include
int main(void)
{
struct time t;
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
return 0;
}
time 是一个结构体,, 其中成员函数 ti_hund 是毫秒。。。

--------------------------------------------------------------------------------
四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;
DWORD dwStart = GetTickCount();
//这里运行你的程序代码
DWORD dwEnd = GetTickCount();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
这个函数只精确到55ms,1个tick就是55ms。
--------------------------------------------------------------------------------
五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高
DWORD dwStart = timeGetTime();
//这里运行你的程序代码
DWORD dwEnd = timeGetTime();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
虽然返回的值单位应该是ms,但传说精度只有10ms。
=========================================
//*****************************************************************Unix
##unix时间相关,也是标准库的
//*********************************************************************
1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;
time_t timegm(struct tm *tm);
2.mktime使用时区信息
time_t mktime(struct tm *tm);
timelocal 函数是GNU扩展的与posix函数mktime相当
time_t timelocal (struct tm *tm);
3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;
struct tm * gmtime(const time_t *clock);
4.localtime使用时区信息
struct tm * localtime(const time_t *clock);
1.time获取时间,stime设置时间
time_t t;
t = time(&t);
2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;
int stime(time_t *tp)
3.UTC=true 表示采用夏时制;
4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;
5.设置时区推荐使用setup来设置;
6.设置时区也可以先更变/etc/sysconfig/clock中的设置 再将ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效
time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t
看看你的系统是否有time_t64,它能表示更大的时间范围
//***************************************************************windows
##Window里面的一些不一样的
//*********************************************************************

一.CTime () 类
VC编程一般使用CTime类 获得当前日期和时间

CTime t = GetCurrentTime();
SYSTEMTIME 结构包含毫秒信息
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
SYSTEMTIME t1;
GetSystemTime(&t1)
CTime curTime(t1);
WORD ms = t1.wMilliseconds;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);
在time.h中的_strtime() //只能在windows中用
char t[11];
_strtime(t);
puts(t);

//*****************************
获得当前日期和时间
CTime tm=CTime::GetCurrentTime();
CString str=tm.Format("%Y-%m-%d");
在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:
CTime t = CTime::GetCurrentTime(); //获取系统日期,存储在t里面
int d=t.GetDay(); //获得当前日期
int y=t.GetYear(); //获取当前年份
int m=t.GetMonth(); //获取当前月份
int h=t.GetHour(); //获取当前为几时
int mm=t.GetMinute(); //获取当前分钟
int s=t.GetSecond(); //获取当前秒
int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六

二.CTimeSpan类
如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:
CTime t1( 1999, 3, 19, 22, 15, 0 );
CTime t = CTime::GetCurrentTime();
CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔
int iDay=span.GetDays(); //获取这段时间间隔共有多少天
int iHour=span.GetTotalHours(); //获取总共有多少小时
int iMin=span.GetTotalMinutes();//获取总共有多少分钟
int iSec=span.GetTotalSeconds();//获取总共有多少秒

------------------------------------------------------------------------------

三._timeb()函数
_timeb定义在SYS\TIMEB.H,有四个fields
dstflag
millitm
time
timezone
void _ftime( struct _timeb *timeptr );
struct _timeb timebuffer;
_ftime( &timebuffer );
取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!

四.设置计时器
定义TIMER ID
#define TIMERID_JISUANFANGSHI 2
在适当的地方设置时钟,需要开始其作用的地方;
SetTimer(TIMERID_JISUANFANGSHI,200,NULL);
在不需要定时器的时候的时候销毁掉时钟
KillTimer(TIMERID_JISUANFANGSHI);
对应VC程序的消息映射
void CJisuan::On<wbr>Timer(UINT nIDEvent) <br> {switch(nIDEvent)}<br> ---------------------------------------------------------------------------------------<br> ##如何设定当前系统时间---------------------------------------windows<br> SYSTEMTIME m_myLocalTime,*lpSystemTime;<br> m_myLocalTime.wYear=2003;<br> m_myLocalTime.wM;<br> m_myLocalTime.wDay=1;<br> m_myLocalTime.wHour=0;<br> m_myLocalTime.wMinute=0;<br> m_myLocalTime.wSec;<br> m_myLocalTime.wMillisec;<br> lpSystemTime=&amp;m_myLocalTime;<br> if( SetLocalTime(lpSystemTime) ) //此处换成 SetSystemTime( )也不行<br> MessageBox("OK !"); <br> else<br> MessageBox("Error !"); <br> SYSTEMTIME m_myLocalTime,*lpSystemTime;<br> m_myLocalTime.wYear=2003;<br> m_myLocalTime.wM;<br> m_myLocalTime.wDay=1;<br> lpSystemTime=&amp;m_myLocalTime;<br> if( SetDate(lpSystemTime) ) //此处换成 SetSystemTime( )也不行<br> MessageBox("OK !"); <br> else<br> MessageBox("Error !");</wbr>

C语言获取系统时间的几种方式 !相关推荐

  1. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...

    核心提示:C语言中如何获取时间?精度如何?1使用time_ttime(time_t*timer)精确到秒2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3计 ...

  2. Oracle 查询当前系统时间的几种方式

    2019独角兽企业重金招聘Python工程师标准>>> Oracle 获取当前系统时间的几种方式: /* Oracle使用计算机操作系统的当前日期和时间. SYSDATE:可将Sys ...

  3. Java 获取系统时间的三种方式,总结起来

    业务场景中,不乏会需要取到当前系统的时间,做一些判断,比如判断某个执行过程需要花多长时间,然后将时间记录下来,返回给业务查看:或者需要或者一个唯一的值做一些表单单号,那么当前系统时间就是唯一的,可以适 ...

  4. Linux 修改系统时间的两种方式

    一:更新系统时间的方式 1.手动修改 通过相关工具来手动修改系统的时间. 2.自动同步 使用NTP自动同步系统时间. 二:手动修改系统时间 1.date工具 作用:显示和设置系统时间 选项: -d & ...

  5. android自动获取系统时间,Android--获取系统时间的几种方式

    方式一: import java.text.SimpleDateFormat; SimpleDateFormat formatter = new SimpleDateFormat ("yyy ...

  6. java获取系统时间的几种方法_Java篇—获取当前系统时间的三种方式(超详细+多方法)...

    1.通过util包中的Date类来获取当前时间 方法1详细代码: public class Exercise17 { public static void main(String[] args){ D ...

  7. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  8. Java获取当前时间的四种方式

    面试时被问到如何获取系统当前时间,平时没有怎么注意这个问题,这里整理一下 import java.text.SimpleDateFormat; import java.util.Calendar; i ...

  9. MES系统读取MySQL数据_MES系统数据采集的四种方式

    MES系统数据采集的四种方式 MES系统的最大特点,就是能实时收集生产过程中的各类信息.数据,然后汇集到数据库中,作数据分析及供管理层查询.如何高效的采集车间的各类数据,是决定一个MES系统软件项目实 ...

  10. mysql java 日期格式化_(转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)...

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

最新文章

  1. C++中四种 cast 转换
  2. python使用redis在实际场景使用_Python使用Redis实现作业调度系统(超简单)
  3. 【模式识别】Fisher线性判别实验报告之MATLAB仿真
  4. 仓库货位卡标识牌_【干货】仓库布局,你想学啊,我教你啊!
  5. JSON解析方式 gson
  6. 算法工程师当前选哪个方向好?1,计算机视觉;2,自然语言处理;3,风控;4,推荐系统?...
  7. 计算机应用基础第3次平时作业,计算机应用基础第3次作业.doc
  8. 2.心理学家-威廉.詹姆斯
  9. 最小行走距离(dfs+虚树)
  10. 【谷粒商城 - k8s、devOps专栏】
  11. ftc文件_美国参议员指责FTC拒绝收集防病毒数据
  12. 又一神作。Alibaba“M8级”架构师总结微服务与事件驱动架构启蒙手册
  13. 《高楼的性能工程实战课》微服务电商项目技术全解析
  14. 物联网技术如何改变了我们的生活?
  15. 中国经济稳中有进态势依旧
  16. Error in DESeqDataSet(se, design = design, ignoreRank) : some values in assay are not integers
  17. 用CentOS 7安装cadence搭建适合IC Design的科研环境(四)——IC617、MMSIM151、calibre2015安装过程step by step
  18. 追女生要经过哪几个阶段?告诉你追女生经历的具体阶段!
  19. CSR867x — IOS设备搜索到的BLE外设名称与实际名称不相符的问题分析
  20. 【论文阅读 | cryoET】Gum-Net:快速准确的3D Subtomo图像对齐和平均的无监督几何匹配

热门文章

  1. Shell脚本 条件
  2. TensorFlow 2.0源码编译步骤
  3. cocos2d-x瓦片地图制作详解
  4. RSTP原理和新增特性
  5. KVM详解(二)——KVM安装部署
  6. LNMP详解(十)——Nginx负载分担实战
  7. PTA(BasicLevel)-1009 说反话
  8. 中国老工业基地吉林对外贸易重回历史高水平
  9. 复习Javascript专题(三):面向对象(对象的创建与继承,原型及原型链)
  10. [JDK8] Lambda