获取本地时间

typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,
*PSYSTEMTIME;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

1.GetLocalTime获取的是本地时区时间

SYSTEMTIME localSysTime;
GetLocalTime(&localSysTime);
  • 1
  • 2

2.GetSystemTime获取的是UTC时间

SYSTEMTIME utcSysTime;
GetSystemTime(&utcSysTime);
  • 1
  • 2

Note: 
UTC(Universal Time Coordinated),协调世界时,又称世界标准时间或世界协调时间. 
UTC与格林尼治平均时一样,都与英国伦敦的本地时相同. 
整个地球分为二十四个时区,每个时区都有自己的本地时间. 
北京时区是东八区,领先UTC八个小时.(UTC+8) 
伦敦时间为UTC+0. 
也就是说,若全球标准时间是2012-07-04 00:00:00,则北京时间为2012-07-04 08:00:00.

3.UTC时间和具体时区时间的转换

<1> UTC Time –> Local Time

BOOL WINAPI SystemTimeToTzSpecificLocalTime(
__in LPTIME_ZONE_INFORMATION lpTimeZone,
__in LPSYSTEMTIME lpUniversalTime,
__out LPSYSTEMTIME lpLocalTime
);
  • 1
  • 2
  • 3
  • 4
  • 5

lpTimeZone 
A pointer to a TIME_ZONE_INFORMATION structure that specifies the time zone of interest. 
If lpTimeZone is NULL, the function uses the currently active time zone. 
所以将lpTimeZone设为NULL就会将UTC时间转换为本地时间

<2> Local Time –> UTC Time

BOOL WINAPI TzSpecificLocalTimeToSystemTime(
__in LPTIME_ZONE_INFORMATION lpTimeZoneInformation,
__in LPSYSTEMTIME lpLocalTime,
__out LPSYSTEMTIME lpUniversalTime
);
  • 1
  • 2
  • 3
  • 4
  • 5

类同.

File Time

我们在Windows系统中获取文件的创建时间,存取时间,修改时间可以使用下面的API.

BOOL WINAPI GetFileTime(
__in HANDLE hFile,
__out LPFILETIME lpCreationTime,
__out LPFILETIME lpLastAccessTime,
__out LPFILETIME lpLastWriteTime
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

获取的时间为UTC FILETIME.

typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
  • 1
  • 2
  • 3
  • 4

Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601. 
表示从时间1601-06-01起的100纳秒间隔数.

对于时间的显示,使用SYSTEMTIME为好. 
而对于时间的计算&比较,使用FILETIME为好.

Note:使用GetFileTime获取的FILETIME为UTC FILETIME.

FILETIME比较函数:

LONG WINAPI CompareFileTime(
__in const FILETIME* lpFileTime1,
__in const FILETIME* lpFileTime2
);
  • 1
  • 2
  • 3
  • 4

-1— First file time is earlier than second file time. 
0 —- First file time is equal to second file time. 
1 —- First file time is later than second file time.

FILETIME <–> SYSTEMTIME

FileTimeToSystemTime 
SystemTimeToFileTime 
FileTimeToLocalFileTime 
LocalFileTimeToFileTime

对于利用GetFileTime获取的UTC FILETIME怎样转换为Local SYSTEMTIME 
GetFileTime–>UTC FILETIME–>(FileTimeToSystemTime)–>UTC SYSTEMTIME–>(SystemTimeToTzSpecificLocalTime)–>Local SYSTEMTIME 
GetFileTime–>UTC FILETIME–>(FileTimeToLocalFileTime)–>Local FILETIME–>(FileTimeToSystemTime)–>Local SYSTEMTIME

时间间隔的运算

将FILETIME–>LARGE_INTEGER,再通过LARGE_INTEGER进行运算

typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
struct {
DWORD LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

eg:

FILETIME time1;
FILETIME time2;
LARGE_INTEGER liTime1;
LARGE_INTEGER liTime2;
liTime1.LowPart = time1.dwLowDateTime;
liTime1.HighPart = time1.dwHighDateTime;
liTime2.LowPart = time2.dwLowDateTime;
liTime2.HighPart = time2.dwHighDateTime;
LARGE_INTEGER liElapsedTime;
liElapsedTime.QuadPart = liTime2.QuadPart - liTime1.QuadPart;
liElapsedTime.QuadPart /= 10000000; //相差的秒数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

时间的转换公式: 
1微秒 = 1000 纳秒 
1毫秒 = 1000 微秒 
1秒 = 1000毫秒

http://blog.csdn.net/hisinwang/article/details/45116133

Windows获取时间函数(使用GetLocalTime,GetSystemTime,SystemTimeToTzSpecificLocalTime,GetFileTime API函数的更多相关文章

  1. windows获取时间的方法

    介绍       我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录 ...

  2. Windows高精度时间

    目录 第1章计时    1 1.1 GetTickCount    1 1.2 timeGetTime    1 1.3 QueryPerformanceCounter    1 1.4 测试     ...

  3. 如何通过HOOK改变windows的API函数(找到函数的相对偏移)

    我们知道,系统函数都是以DLL封装起来的,应用程序应用到系统函数时,应首先把该DLL加载到当前的进程空间中,调用的系统函数的入口地址,可以通过GetProcAddress函数进行获取.当系统函数进行调 ...

  4. 2、FreeRTOS任务相关API函数

    1.任务相关的API函数 函数存在于task.c中,主要的函数有: xTaskCreate():使用动态的方法创建一个任务: xTaskCreatStatic():使用静态的方法创建一个任务(用的非常 ...

  5. Delphi获取当前系统时间(使用API函数GetSystemTime)

    在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书” ...

  6. 【转载】c/c++在windows下获取时间和计算时间差的几种方法总结

    一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...

  7. c/c++在windows下获取时间和计算时间差的几种方法总结 【转】

    http://blog.csdn.net/coder_xia/article/details/6566708 一.标准C和C++都可用 1.获取时间用time_t time( time_t * tim ...

  8. c和c++在windows下获取时间和计算时间差的方法总结

    c/c++在windows下获取时间和计算时间差的几种方法总结 一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double diff ...

  9. 获取时间SQL函数语句

    1.获取时间 获取当天的数据 where  DATEDIFF (DD, 数据库中时间的字段 ,GETDATE())=0 查询24小时内的 where  DATEDIFF (HH, 数据库中时间的字段 ...

随机推荐

  1. 黑马day01 xml 的解析方式

    XML编程:利用java程序去增删改查(CRUD)xml中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了非常多的解析api sun jaxp既有dom方式也有sax方式,而 ...

  2. Qt Creator 源码学习 03:qtcreator.pro

    当我们准备好 Qt Creator 的源代码之后,首先进入到它的目录,来看一下它的源代码目录有什么奥秘. 这里一共有 9 个文件夹和 9 个文件.我们来一一看看它们都是干什么用的. .git: 版本控 ...

  3. POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题

    两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...

  4. jni和C++通信中文乱码的问题

    转自 http://www.cnblogs.com/bluesky4485/archive/2011/12/13/2285802.html 首先,需要明确几个关于编码的基本概念: java内部是使用的 ...

  5. 5W1H分析法和5W2H分析法

    5W1H分析法也称六何分析法,是一种思考方法,也可以说是一种创造技法.是对选定的项目.工序或操作,都要从原因(WHY).对象(WHAT).地点(WHERE).时间(WHEN).人员(WHO).方法(H ...

  6. Android 蓝牙扫描代码

    /** * Created by rbq on 2016/11/1. */ import android.bluetooth.BluetoothAdapter; import android.blue ...

  7. php 获取数组第一个key 第一个键值对 等等

    PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即: ...

  8. 6.1、Android硬件访问服务之框架

    1.通过前面led点亮的例子,其流程如下 Android app(java)(通过loadLibrary)——>C library(C库做如下事情)——>1.JNI_Onload 2.jn ...

  9. hcharts实现堆叠柱形图

    <!DOCTYPE > <html> <head> <meta charset="utf-8"><link rel=" ...

  10. C++ BYTE数组转字符串

    第一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE[2]=0x56 最后要转换成字符串123456 另外一种情况: BYTE[0]=Ox12 BYTE[1]=0x34 BYTE ...