热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WindowsAPI的时间结构体、时间转换及时间获取

WindowsAPI的时间结构体、时间转换及时间获取
Windows API的时间结构体、时间转换及时间获取


 

时间格式:DosDateTime <====>FileTime <====> SystemTime

                    |               |               |

使用上面          LocalFileTime  FileName   系统时间和本地时间

格式的时间:      (本地时区)    UTC        

                

 

一.时间结构体

时间结构体1//文件时间格式

typedef struct _FILETIME {

   DWORD dwLowDateTime;  ///64位的低32

   DWORD dwHighDateTime; ///64位的高32

}FILETIME;

(typdefDWORD unsigned long)

说明:

   FILETIME结构是一个表示距离 1601年1月10000(英国格林威治时间,UTC)为计时起点 的时间间隔数的64位整数,数值单位为100ns(纳秒)

使用该结构定义出的变量,不能直接用来进行加减运算,应先合成64为整型数,再进行各种数学运算。如方法一:

FILETIME time;

__int64 val64= time.dwHighDateTime<<32 | time.dwLowDateTime

方法二,使用LARGE_INTEGER结构:

FILETIME time1;

LARGE_INTEGER time2;

time2.LowPart=time1.dwHighDateTime;

time2.HighPart=time1.dwHighDateTime;

time2.QuadPart; // __int64

 

时间结构体2.1:

typedef union _LARGE_INTEGER{

   struct{

       LONG LowPart; ///64位整型数的低32

       LONG HighPart;/// 64位整型数的高32

    };

LONGLONG QuadPart; ///64位整型数

}LARGE_INTEGER;

typedef LARGE_INTEGER *PLARGE_INTEGER;

 

时间结构体2.2

ULARGE_INTEGER //一个64位的无符号整型值
The ULARGE_INTEGER structure is used to specify a 64-bit unsigned integer value.
//类型定义
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
ULONGLONG QuadPart;
} ULARGE_INTEGER;
Members
Specifies the low-order 32 bits.
Specifies the high-order 32 bits.
Specifies a 64-bit unsigned integer.

时间结构体3//系统时间格式

typedef struct _SYSTEMTIME{ 

   WORD wYear;         ///

   WORD wMonth;       /// 月 。1月份则值为12月份则值为2…..

   WORD wDayOfWeek;    //// 一星期中的第几天。星期日则值为0,星期一则值为1….

   WORD wDay;      ///

   WORD wHour;         ///

   WORD wMinute;       ///

   WORD wSecond;       ///

   WORD wMilliseconds;     /// 毫秒

}SYSTEMTIME;

不要直接对结构体里的成员进行运算。应该:

先从SYSTEMTIME structure转换成FILETIME structure

再把FILETIME structure转换成LARGE_INTEGER structure

最后LARGE_INTEGER structure转换成64位整型数,才进行加减运算。

 

 

二.时间格式转换API

1.1用于转换 MS-DOS16位日期和时间值 为 64-bit文件时间格式

BOOLDosDateTimeToFileTime(

   WORD wFatDate,  // 16-bit MS-DOS date

   WORD wFatTime,  // 16-bit MS-DOS time

   LPFILETIME lpFileTime   // pointer to buffer for 64-bit file time

  );  

参数:

wFatDate,指定16MS-DOS日期值。各位的代表意义:

     描述

0-4   (1-31)

5-8   (1January, 2February,…)

9-15  年,当前距离1980年的年数(包括1980年)

wFatTime,指定16MS-DOS时间值。各位的代表意义:

    描述

0-4  

5-10      (0-59)

11-15  (0-23)

 

1.2用于转换 64位文件时间格式 为 MS-DOS日期时间值.

BOOLFileTimeToDosDateTime(

   CONST LPFILETIME lpFileTime,    // pointer to 64-bit file time

   LPWORD lpFatDate,   // pointer to variable for MS-DOS date 

   LPWORD lpFatTime    // pointer to variable for MS-DOS time 

  );

 

2.1用于把 文件时间格式 转换成 系统时间格式

BOOLFileTimeToSystemTime(

   CONST FILETIME *lpFileTime,

   LPSYSTEMTIME lpSystemTime );

返回值:

   成功,则返回TURE

   失败,则返回FALSETo get extended error information, call GetLastError.

注:当FILETIME的值等于或大于0x80000000 00000000,则函数会失败。

 

2.2用于把 系统时间格式 转换成 文件时间格式

BOOLSystemTimeToFileTime(

   CONST SYSTEMTIME *lpSystemTime,

   LPFILETIME lpFileTime

  );

 

3.1///用把 UTC时间 转换为 本地时间

BOOLFileTimeToLocalFileTime(

   CONST FILETIME *lpFileTime, // pointer to UTC file time to convert 

   LPFILETIME lpLocalFileTime // pointer to converted file time

  );

3.2///用把本地时间 转换为 UTC时间

 BOOLLocalFileTimeToFileTime(

   CONST FILETIME *lpLocalFileTime, // address of local file time to convert

   LPFILETIME lpFileTime   // address of converted file time

   );

 

 

三.获得系统时间

获取当前系统的日期和时间(UTC时间 )

VOIDGetSystemTime( LPSYSTEMTIME lpSystemTime );

 

BOOLSetSystemTime( CONST SYSTEMTIME *lpSystemTime );

 

获取当前系统的日期和时间(本地时区 )

VOIDGetLocalTime( LPSYSTEMTIME lpSystemTime );

 

BOOLSetLocalTime( CONST SYSTEMTIME *lpSystemTime );

 

 

#include

typedef long time_t;

//获得系统时间,从UTC到获取时刻的秒数

time_ttime( time_t *timer );

 

struct tm {

       int tm_sec;     /* seconds after the minute - [0,59] */

       int tm_min;     /* minutes after the hour - [0,59] */

       int tm_hour;    /* hours since midnight - [0,23] */

       int tm_mday;    /* day of the month - [1,31] */

       int tm_mon;     /* months since January - [0,11] */

       int tm_year;    /* years since 1900 */

       int tm_wday;    /* days since Sunday - [0,6] */

       int tm_yday;    /* days since January 1 - [0,365] */

       int tm_isdst;   /* daylight savings time flag */

       };

//time_t转换为tm格式,并是本地时区的了

structtm *localtime( const time_t *timer ); 

 

 

四.获得指定文件的各项时间

 

 

 

 

五.获得线程和进程的各项时间

获得指定线程的各项时间信息:

BOOL WINAPIGetThreadTimes(

IN HANDLE      hThread,

OUT LPFILETIMElpCreationTime,

OUT LPFILETIMElpExitTime,

OUT LPFILETIMElpKernelTime,

OUT LPFILETIMElpUserTime

);

参数:

lpCreationTime,指向一个FILETIME结构体返回线程被创建时的时间;

lpExitTime   指向一个FILETIME结构体返回线程被终止时的时间;

lpKernelTime 指向一个FILETIME结构体返回线程在内核模式下执行的累计时间;

lpUserTime   指向一个FILETIME结构体返回线程在用户模式下执行的累计时间;

返回值:

   成功,则返回TRUE

   失败,则返回FALSE。想获取错误代码,请调用GetLastError

 

获得进程的各项时间信息:

GetProcessTimes是个类似GetThreadTimes的函数,适用于进程中的所有线程:

BOOLGetProcessTimes(

HANDLE     hProcess,

  PFILETIME   pftCreationTime,

PFILETIME  pftExitTime,

  PFILETIME   pftKernelTime,

PFILETIME  pftUserTime

);

说明:

GetProcessTimes返回的时间适用于某个进程中的所有线程(甚至是已经终止运行的线程)。例如,返回的内核时间是所有进程的线程在内核代码中经过的全部时间的总和


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • VPX611是北京青翼科技推出的一款采用6U VPX架构的高性能数据存储板。该板卡搭载两片Xilinx Kintex-7系列FPGA作为主控单元,内置RAID控制器,支持多达8个mSATA盘,最大存储容量可达8TB,持续写入带宽高达3.2GB/s。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
author-avatar
大家庭方不_402
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有