时间格式运算问题总结

原创 2012年03月22日 15:46:08

都是从网上转载过来的,总结一下。

(1) FILETIME和64位整型运算

一个简单应用记录一下取系统当前时间,转化为FILETIME格式,再转化成毫秒数其中FILETIME::QuartPart 为ULONGLONG(即unsigned __int64)类型,64位整数

FILETIME ft; 

ULARGE_INTEGER uliTime;

//SYSTEMTIME st;

//GetSystemTime(&st); 
//SystemTimeToFileTime(&st, &ft);

GetSystemTimeAsFileTime(&ft); //win32 api

uliTime.LowPart = ft.dwLowDateTime;

uliTime.HighPart = ft.dwHighDateTime;

ulitime.QuartPart /= 10000; //转化为毫秒数,因为FILETIME精度为100纳秒

(2)FILETIME, SYSTEMTIME 与 time_t 相互转换  

#####SYSTEMTIME 与 FILETIME相互转换##### 
可以使用系统函数
FileTimeToSystemTime(&ftcreate,&stcreate);   

参数:
(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) 
说明 
根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 
返回值 
Long,非零表示成功,零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
lpFileTime FILETIME,包含了文件时间的一个结构 
lpSystemTime SYSTEMTIME,用于装载系统时间信息的一个结构 

#####SYSTEMTIME 与 time_t相互转换##### 

void TimetToSystemTime( time_t t, LPSYSTEMTIME pst )
{
   FILETIME ft;

   LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
   ft.dwLowDateTime = (DWORD) ll;
   ft.dwHighDateTime = (DWORD)(ll >> 32);

   FileTimeToSystemTime( &ft, pst );
}

void SystemTimeToTimet( SYSTEMTIME st, time_t *pt )
{
   FILETIME ft;
   SystemTimeToFileTime( &st, &ft );

   LONGLONG ll;

   ULARGE_INTEGER ui;
   ui.LowPart = ft.dwLowDateTime;
   ui.HighPart = ft.dwHighDateTime;

   ll = (ft.dwHighDateTime << 32) + ft.dwLowDateTime;

   *pt = (DWORD)((LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000);
}

 #### FileTimeToTime_t ####

void  FileTimeToTime_t(  FILETIME  ft,  time_t  *t  )  
{  
           LONGLONG  ll;  
 
           ULARGE_INTEGER            ui;  
           ui.LowPart            =  ft.dwLowDateTime;  
           ui.HighPart            =  ft.dwHighDateTime;  
 
           ll            =  ft.dwHighDateTime  <<  32  +  ft.dwLowDateTime;  
 
           *t            =  ((LONGLONG)(ui.QuadPart  -  116444736000000000)  /  10000000);  
}  
(3)时间格式的相互转换

一.时间类型间的转换:
1.time_t 转 FILETIME
 FILETIME ft;
 LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
 ft.dwLowDateTime = (DWORD) ll;
 ft.dwHighDateTime = (DWORD)(ll >> 32);

2.FILETIME 转 time_t  
 FILETIME ft;
 
 LONGLONG llTime;
time_t t;
 llTime = (ft.dwHighDateTime << 32) + ft.dwLowDateTime;

 t = (DWORD)((LONGLONG)(llTime - 116444736000000000) / 10000000);

3.SYSTEMTIME 转 FILETIME
FILETIME ft;
SYSTEMTIME st;
 SystemTimeToFileTime( &st, &ft );

4. FILETIME 转 SYSTEMTIME
FILETIME ft;
SYSTEMTIME st;
FileTimeToSystemTime( &ft, &st);

5.DATE 转 SYSTEMTIME
DATE pst;
SYSTEMTIME st;
  VariantTimeToSystemTime(pst,&st);
6. SYSTEMTIME 转 DATE 
DATE pst;
SYSTEMTIME st;

SystemTimeToVariantTime(st, &pst);

7. BYTE转DWORD

 #define   MAKEB2W(c0, c1, c2, c3) ((DWORD)(((BYTE)(c0)|((WORD)((BYTE)(c1))<<8))|(((DWORD)(BYTE)(c2))<<16) | (((DWORD)(BYTE)(c3))<<24)))



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SQLite 日期类型(转)

SQLite日期类型 简单示例: SELECT     datetime(CHANGE_DATE,'localtime'),     strftime('%Y-%m-%d',CHA...

phoenix对于时间的查询

select TO_CHAR(trx_date, 'yyyy-MM-dd HH:mm:ss') from POSTEST limit 1;

to_date函数与当前系统时间格式可否隐式转换问题总结

1.如to_date函数中时间格式与当前时间格式相符,可以不在函数中指定格式而完成隐式转换。 BYS@bys1>select sysdate from dual; SYSDATE --------...

Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)

请稳步我的博客查阅并下载所有资源以及源代码 http://www.cckan.net 文章导航  SQL Server 2005  学习笔记系列文章导航(存储过程,视频,索引,Clr,各种工具...

GridView中日期时间显示格式问题

  • 2008年02月02日 09:30
  • 39KB
  • 下载

mysql 中时间运算问题

mysql时间相减的问题(bug) 今天看到宁青同学的一条微博,提到mysql日期相减的错误结果,以前没有怎么注意,于是测试了一下,发现确实很坑爹,很容易踩雷,于是整理博客提醒一下大家。 先看一下...

关于JSON数据格式返回时间数据格式化问题

结合上一篇 :关于跨域返回jsonp的示例 首先看两张图,分别是前后后打断点监测到的数据 java后台数据: 图说明,后台java返回一个List,这个list是联合多表...
  • neil89
  • neil89
  • 2015年11月03日 14:23
  • 7282

JQuery返回Json日期格式的問題 jquery对时间/Date(1387900800000)进行处理

jquery对时间/Date(1387900800000)进行处理

android 时间格式及时间差问题

最近做的项目中,聊天界面设计到时间格式的问题,因为以前没有仔细研究过时间格式以及时间差的问题,所以把android的时间方面的只是恶补了一下。 一、首先介绍一下时间概念。   在android中时间分...

C#关于DateTime得到的当前时间的格式问题

DateTime.Now.ToShortTimeString()  DateTime dt = DateTime.Now;  dt.ToString();//2005-11-5 13:21:25 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:时间格式运算问题总结
举报原因:
原因补充:

(最多只允许输入30个字)