// =============================================================================
// 文件名称: TimeUtil.hpp
// 内容说明:
//
// 编写人: IYFT
// E-Mail: IYFT@163.com
//
// 创建日期: 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('