王朝网络
分享
 
 
 

【编程】代码片段 - 日期时间

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

// 文件名称: TimeUtil.hpp

// 内容说明:

//

// 编写人: IYFT

// E-Mail: IYFT@163.com

//

// 创建日期: office:smarttags" />2004年07月01日10:52:54

// 修改日期: 2004年09月13日15:08:35

// -----------------------------------------------------------------------------

//

// 修改记录:

// -

// -

//

// ============================================================================+

// =============================================================================

// 保证源文件只会被编译一次

// -----------------------------------------------------------------------------

#if _MSC_VER >= 1000

// 使源文件只会被编译一次

#pragma once

#endif // _MSC_VER >= 1000

#ifndef __HPP_TIMEUTIL_HPP__

#define __HPP_TIMEUTIL_HPP__

// =============================================================================

#define DTM_DATE_LENGTH 10

#define DTM_DATETIME_LENGTH 20

// 返回当前本地时区(单位为秒,因为有些时区是小数)

// 北京时区为 +08:00 = +8*60*60 = +28800

// 德黑兰时区为 +03:30 = +3*60*60 + 30*60 = +12600

// 夏威夷时区为 -10:00 = -10*60*60 = -36000

STATIC LONG DTM_getTimeZone(OUT TIME_ZONE_INFORMATION **ppZT = NULL)

{

STATIC TIME_ZONE_INFORMATION tz;

STATIC DWORD nResult = 0;

STATIC BOOL bInited = FALSE;

if(bInited == FALSE)

{

switch(::GetTimeZoneInformation(&tz))

{

case TIME_ZONE_ID_INVALID:

nResult = 0;

break;

default:

nResult = ((tz.Bias + tz.StandardBias) * -60);

}

bInited = TRUE;

}

if(ppZT != NULL)

{

*ppZT = &tz;

}

return nResult;

}

// 返回当前本地时间

STATIC DWORD DTM_getLocaleCurrentDate()

{

SYSTEMTIME t; ::GetLocalTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

return nDate;

}

// 返回当前本地时间

STATIC DWORD DTM_getLocaleCurrentDate(OUT LPTSTR sDate)

{

SYSTEMTIME t; ::GetLocalTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

LPTSTR sPos = sDate;

INT2T(sPos, 4, t.wYear, 4); sPos+=4;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wMonth, 2); sPos+=2;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wDay, 2); sPos+=2;

*sPos = __T(’\0’);

return nDate;

}

// 返回当前本地时间

STATIC VOID DTM_getLocaleCurrentString(OUT LPTSTR sDate)

{

SYSTEMTIME t; ::GetLocalTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

LPTSTR sPos = sDate;

INT2T(sPos, 4, t.wYear, 4); sPos+=4;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wMonth, 2); sPos+=2;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wDay, 2); sPos+=2;

*sPos++ = __T(’ ’);

INT2T(sPos, 2, t.wHour, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wMinute, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wSecond, 2); sPos+=2;

*sPos = __T(’\0’);

}

// 返回当前标准时间

// 注意:格林威治标准时间和本地时间有时差,北京是8个小时

STATIC DWORD DTM_getCurrentDate()

{

SYSTEMTIME t; ::GetSystemTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

return nDate;

}

// 返回当前标准时间

// 注意:格林威治标准时间和本地时间有时差,北京是8个小时

STATIC DWORD DTM_getCurrentDate(OUT LPTSTR sDate)

{

SYSTEMTIME t; ::GetSystemTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

LPTSTR sPos = sDate;

INT2T(sPos, 4, t.wYear, 4); sPos+=4;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wMonth, 2); sPos+=2;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wDay, 2); sPos+=2;

*sPos = __T(’\0’);

return nDate;

}

// 返回当前标准时间

// 注意:格林威治标准时间和本地时间有时差,北京是8个小时

STATIC VOID DTM_getCurrentString(OUT LPTSTR sDate)

{

SYSTEMTIME t; ::GetSystemTime(&t);

DWORD nDate = t.wYear * 10000 + t.wMonth * 100 + t.wDay;

LPTSTR sPos = sDate;

INT2T(sPos, 4, t.wYear, 4); sPos+=4;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wMonth, 2); sPos+=2;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wDay, 2); sPos+=2;

*sPos++ = __T(’ ’);

INT2T(sPos, 2, t.wHour, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wMinute, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wSecond, 2); sPos+=2;

*sPos = __T(’\0’);

}

// 返回日期时间字符串;格式为 [YYYY-MM-DD HH:MM:SS]

STATIC VOID DTM_getString(IN SYSTEMTIME t, OUT LPTSTR sTime)

{

LPTSTR sPos = sTime;

INT2T(sPos, 4, t.wYear, 4); sPos+=4;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wMonth, 2); sPos+=2;

*sPos++ = __T(’-’);

INT2T(sPos, 2, t.wDay, 2); sPos+=2;

*sPos++ = __T(’ ’);

INT2T(sPos, 2, t.wHour, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wMinute, 2); sPos+=2;

*sPos++ = __T(’:’);

INT2T(sPos, 2, t.wSecond, 2); sPos+=2;

*sPos = __T(’\0’);

}

// 返回时间字符串;格式为 [X 分 X 秒]

STATIC VOID DTM_getTimeText(IN DWORD nTime, OUT LPTSTR sTime)

{

if(nTime < 1000*60)

{

DWORD nIntegral = nTime/1000;

DWORD nDecimal = nTime%1000;

nDecimal = (nDecimal*100)/1000;

INT2T(sTime, 16, nIntegral);

UINT nCount = LPTSTRLen(sTime);

if(nDecimal > 0)

{

sTime[nCount++] = __T(’.’);

if(nDecimal >= 10)

INT2T(sTime+nCount, 2, (nTime%1000+5)/10, 2);

else

INT2T(sTime+nCount, 2, nDecimal, 2);

nCount += LPTSTRLen(sTime+nCount);

}

sTime[nCount++] = __T(’ ’);

#ifdef UNICODE

sTime[nCount++] = __W(’秒’);

#else

sTime[nCount++] = (ACHAR)0xC3; // 秒 = 0xC3EB

sTime[nCount++] = (ACHAR)0xEB; // 秒 = 0xC3EB

#endif

sTime[nCount ] = TCHR_NULL;

}

else

{

INT2T(sTime, 16, nTime/1000/60);

UINT nCount = LPTSTRLen(sTime);

sTime[nCount++] = __T(’ ’);

#ifdef UNICODE

sTime[nCount++] = __W(’分’);

#else

sTime[nCount++] = (ACHAR)0xB7; // 分 = 0xB7D6

sTime[nCount++] = (ACHAR)0xD6; // 秒 = 0xB7D6

#endif

nTime = nTime%(1000*60);

DWORD nIntegral = nTime/1000;

DWORD nDecimal = nTime%1000;

if(nIntegral>0 || nDecimal>0)

{

sTime[nCount++] = __T(’ ’);

nDecimal = (nDecimal*100)/1000;

INT2T(sTime+nCount, 16, nIntegral);

nCount += LPTSTRLen(sTime+nCount);

if(nDecimal > 0)

{

sTime[nCount++] = __T(’.’);

if(nDecimal >= 10)

INT2T(sTime+nCount, 2, (nTime%1000+5)/10, 2);

else

INT2T(sTime+nCount, 2, nDecimal, 2);

nCount += LPTSTRLen(sTime+nCount);

}

sTime[nCount++] = __T(’ ’);

#ifdef UNICODE

sTime[nCount++] = __W(’秒’);

#else

sTime[nCount++] = (ACHAR)0xC3; // 秒 = 0xC3EB

sTime[nCount++] = (ACHAR)0xEB; // 秒 = 0xC3EB

#endif

}

sTime[nCount ] = TCHR_NULL;

}

}

// 将 Unix Time time_t 转换为 SYSTEMTIME

STATIC VOID DTM_ConvertTime(IN time_t t,OUT LPSYSTEMTIME pst)

{

FILETIME ft;

LONGLONG ll;

ll = Int32x32To64(t, 10000000) + 116444736000000000;

ft.dwLowDateTime = (DWORD)ll;

ft.dwHighDateTime = (DWORD)(ll >> 32);

::FileTimeToSystemTime(&ft, pst);

}

// 将 Unix Time time_t 转换为 FILETIME

STATIC VOID DTM_ConvertTime(IN time_t t,OUT LPFILETIME pft)

{

LONGLONG ll;

ll = Int32x32To64(t, 10000000) + 116444736000000000;

pft->dwLowDateTime = (DWORD)ll;

pft->dwHighDateTime = (DWORD)(ll >> 32);

}

// 将 FILETIME 转换为 Unix Time time_t

STATIC time_t DTM_ConvertTime(IN CONST LPSYSTEMTIME pst)

{

FILETIME ft;

::SystemTimeToFileTime(pst, &ft);

LONGLONG ll = ft.dwHighDateTime;

ll <<= 32;

ll |= ft.dwLowDateTime;

ll -= 116444736000000000;

return (time_t)(ll / 10000000);

}

// 将 FILETIME 转换为 Unix Time time_t

STATIC time_t DTM_ConvertTime(IN CONST LPFILETIME pft)

{

LONGLONG ll = pft->dwHighDateTime;

ll <<= 32;

ll |= pft->dwLowDateTime;

ll -= 116444736000000000;

return (time_t)(ll / 10000000);

}

#endif // #ifndef __HPP_TIMEUTIL_HPP__

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有