时间格式运算问题总结

原创 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)))



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

C#时间日期格式

一、C# 日期格式 DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25dt.ToFileTime().ToString(...
  • qq_33180380
  • qq_33180380
  • 2016年12月07日 17:37
  • 637

html css遇到的问题总结

div的宽度怎么设置才能占浏览器的宽度全部? 因为对盒子模型没有太多的理解,我误认为div没有占满浏览器的全部宽度,是div的问题,实际上,问题是因为body的边距占据了宽度,需要把body的marg...
  • lineuman
  • lineuman
  • 2017年05月14日 19:59
  • 182

调试程序总结

1.没有解决方案时,可新建一个网站将自动生成的东西删掉然后再添加进去。 2.数据库文件不能在裸文件时随意更改名字否则加载了也不能用。 3.在数据库中选择某个数据库文件,选择新建查询可在查询分析器中...
  • pengfeixiong
  • pengfeixiong
  • 2012年01月09日 22:47
  • 380

无优先级运算 回溯 Java

问题描述: 给定n个正整数和4个运算符+,-,*,/,且运算符无优先级,如2+3×5=25。对于任意给定的整数m,试设计一个算 法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。...
  • u011980994
  • u011980994
  • 2013年11月27日 14:24
  • 1845

PHPExcel 读取Excel单元格内容为时间格式 处理方法

读出的时间是天数 excel 的日期是从 1900-01-01 开始计算的(php 是从 1970-01-01) 两者间有一个天数差 25569 时间是格林威治时间 所以有 PH...
  • wendan564447508
  • wendan564447508
  • 2016年09月20日 15:09
  • 1233

时间格式问题

System.Globalization.CultureInfo.InvariantCulture : 和操作系统的语言无关!也就是说,其他的表示方式在不同的操作系统中得的结果可能不一样!    pu...
  • realduke2000
  • realduke2000
  • 2008年04月21日 09:48
  • 420

项目开发、项目管理中遇到的问题总结

项目开发中的事情: 在沈阳某软件公司的开发总结: a.各种书面文档要详细入微而且要规范; b.每次开会前要做会前准备和会后总结,会前准备好会议上会遇到的问题以及我们的解决方案这样在和客户商讨时就不会显...
  • ranmudaofa
  • ranmudaofa
  • 2013年06月04日 10:20
  • 1194

约瑟夫环问题总结

问题简介: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m...
  • qq_27474589
  • qq_27474589
  • 2017年07月01日 15:01
  • 284

最近的android项目开发问题总结

安卓开发还是有碰到很多的问题,然后只有通过项目开发才能提升一些经验,感觉2年前学校里的东西还是学的不少,真正用到的并不是那么多,四大组件其实也就activity采用的多点,其他的三大组件在项目中并不是...
  • u013278099
  • u013278099
  • 2014年12月30日 11:11
  • 1138

Solr中的日期/时间表示

摘要: Solr的日期字段(TrieDateField 和DateRangeField)可以对一个时间点以毫秒精度表示。格式Solr中的日期有很严格的格式限制: YYYY-MM-DDThh:mm:s...
  • jiangchao858
  • jiangchao858
  • 2017年01月22日 16:56
  • 3636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:时间格式运算问题总结
举报原因:
原因补充:

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