c++和windows中获取时间问题
来源:互联网 发布:mysql列名区分大小写吗 编辑:程序博客网 时间:2024/05/17 02:06
时间的分类:
Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。
Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时
间。
一般的,都是先获取日历时间,然后转化成我们可以使用的标准时间,本地时间。
标准c++:
包含文件<time.h>
数据结构:
typedef __time64_t time_t;
struct tm{
int tm_sec; /* seconds afterthe minute - [0,59] */
int tm_min; /* minutes afterthe hour - [0,59] */
int tm_hour; /* hours sincemidnight - [0,23] */
int tm_mday; /* day of themonth - [1,31] */
int tm_mon; /* months sinceJanuary - [0,11] */
int tm_year; /* years since1900 */
int tm_wday; /* days sinceSunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylightsavings time flag */
};
time_t 是一个整数,使用函数:
time_t tt;
time(&tt)或者tt=time(NULL)
获取从1970年到现在(标准时间)所经过的秒数。注意是标准时间,比如我现在是在东8区,北京时间是19:00,那么获取的时间是到11:00的秒数。如果想获取到本地的时间,加上8*3600=28800即可。
获取秒数后,我们基本上没用,因为我们用的是年月日时分秒的格式。使用函数:
Tm * t;
t=gmtime(&tt);获取标准时间或者
t= localtime(&tt);获取当地时间
这样就能用我们习惯的格式了。
Windows
Windows中直接跳过了获取日历时间,直接填充标准时间。
在window中,提供了一种和tm类似的数据结构:
typedef struct _SYSTEMTIME{
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,*PSYSTEMTIME, *LPSYSTEMTIME;
优势是多了毫秒,劣势是没有了在一年中的第几天和夏令时(不知道是什么玩意)。
不同的是tm中的year是和1900年的差,比如现在是2010年,在tm的year中,是110。
使用函数:
SYSTEMTIME pst;
GetLocalTime(&pst)
这样就可以使用时间了。
C++时间和windows时间的转化
现在有需求是将time_t和systemtime相互转化(原因是师兄用的是systemtime,后来我的数据库必须使用time_t,所以才这样,日)。转化方法:
Time_t 转化成 systemtime,方法是time_t -> filetime -> systemtimes
Time_tt;
Time(&t);
t+=28800;//转化为当地时间。
SYSTEMTIME pst;
FILETIME ft;
t*=10000000;
t+=116444736000000000;
ft.dwLowDateTime= (DWORD) t;
ft.dwHighDateTime= (DWORD)(t>> 32);
FileTimeToSystemTime( &ft, &pst );
cout<<pst.wYear<<" "<<pst.wMonth<<" "<<pst.wDay<<" "<<pst.wHour<<" "<<pst.wMinute<<" "<<pst.wSecond<<" "<<pst.wMilliseconds<<""<<pst.wDayOfWeek<<endl;
systemtime转化成time_t ,方法是systmetime-> filetime -> time_t
SYSTEMTIME pst1;
pst1.wYear=2010;
pst1.wMonth=5;
pst1.wDay=12;
pst1.wHour=19;
pst1.wMinute=24;
pst1.wSecond=23;
pst1.wMilliseconds=0;
注意:一般的,我们都是知道年月日,时分秒,毫秒和weekofday是不知道的,weekofday不用初始化,但wMilliseconds一定要初始化为0,否则结果会出错。
FILETIME ft1;
SystemTimeToFileTime(&pst1, &ft1);
ULARGE_INTEGER ui;
ui.LowPart = ft1.dwLowDateTime;
ui.HighPart = ft1.dwHighDateTime;
time_t t1;
t1= (LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000;
cout<<t1;
time_t转化成systemtime
void SQLTool::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 );
}
- c++和windows中获取时间问题
- Windows批处理中获取日期和时间
- Windows批处理中获取日期和时间
- Windows批处理中获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C/C++中怎样获取日期和时间
- C语言中自动获取当前时间和日期
- 关于c语言中获取时间及格式和操作
- C/C++中怎样获取日期和时间
- C中获取当前时间
- 解决JAVA获取Windows系统时间问题
- [c#]如何使用windows时间同步服务获取准确时间
- 收集的Flex关于坐标问题的文章
- 1. android帧动画
- Daemon
- RedHat9.0中安装qt4.5(x86) (转)
- 15款免费IDE,推荐给开发者
- c++和windows中获取时间问题
- TNS-12541: TNS: 无监听程序
- Java语言基础:final和static
- 为什么需要htons(), ntohl(), ntohs(),htons() 函数
- Intent小结
- 图标应用程序--添加、删除、保存图标
- 关于添加快捷方式的问题
- 交流测绘行业小程序
- CentOS下如何安装libevent