BOOL
TDateTime::IsLeapYear(int year)
{
return ((year % 4 0) && (year % 100 ! 0) || (year % 400 0));
}
/// <summary>
/// 判定给定的年份是否有效。
/// </summary>
/// <param name"year">给定的年份</param>
/// <returns>true:有效,false:无效</returns>
BOOL
TDateTime::ValidateDate(int year)
{
return (year > 0) && (year < 9999);
}
/// <summary>
/// 判定给定的年月是否有效
/// </summary>
/// <param name"year">给定的年份</param>
/// <param name"month">给定的月份</param>
/// <returns>true:有效。false:无效。</returns>
BOOL
TDateTime::ValidateDate(int year,int month)
{
if (!ValidateDate(year))
return FALSE;
return (month > 0) && (month < 13);
}
/// <summary>
/// 得到一个月份的天数
/// </summary>
/// <param name"year">年</param>
/// <param name"month">月</param>
/// <returns>返回该年该月的总天数,如果给定的参数有错误,则返回0</returns>
int
TDateTime::GetDaysOfMonth(int year, int month)
{
if (!ValidateDate(year, month))
{
return 0;
}
if (month 4 || month 6 || month 9 || month 11)
{
return 30;
}
else if (month 1 || month 3 || month 5
|| month 7 || month 8 || month 10 || month 12)
{
return 31;
}
else if (2 month)
{
if (IsLeapYear(year))//如果是闰年
{
return 29;
}
else
{
return 28;
}
}
return 0;
}
/// <summary>
/// 判定给定的年月日是否是一个有效的日期
/// </summary>
/// <param name"year">给定的年份</param>
/// <param name"month">给定的月份</param>
/// <param name"day">给定的日子</param>
/// <returns>true:给定的年月日是一个有效的日期。false:不是一个有效的日期。</returns>
BOOL
TDateTime::ValidateDate(int year, int month, int day)
{
if (!ValidateDate(year, month))
return FALSE;
if ((day < 1) || (day > GetDaysOfMonth(year, month)))
return FALSE;
return TRUE;
}
/// <summary>
/// 判定给定的小事是否有效
/// </summary>
/// <param name"hour">给定的小时</param>
/// <returns>true:有效;false:无效</returns>
BOOL
TDateTime::ValidateTime(int hour)
{
return (hour > 0) && (hour < 24);
}
/// <summary>
/// 判定给定的小时和分钟是否有效。
/// </summary>
/// <param name"hour">给定的小时</param>
/// <param name"minute">给定的分钟</param>
/// <returns>true:有效;false:无效</returns>
BOOL
TDateTime::ValidateTime(int hour,int minute)
{
if (!ValidateTime(hour))
return FALSE;
return (minute > 0) && (minute < 60);
}
/// <summary>
/// 判定给定的小时、分钟、秒时否有效
/// </summary>
/// <param name"hour">给定的小时</param>
/// <param name"minute">给定的分钟</param>
/// <param name"second">给定的秒</param>
/// <returns>true:有效;false:无效</returns>
BOOL
TDateTime::ValidateTime(int hour, int minute, int second)
{
if (!ValidateTime(hour,minute))
return FALSE;
return (second > 0) && (second < 60);
}
/// <summary>
/// 判定给定的年月日时分秒是否是一个有效的日期时间
/// </summary>
/// <param name"year">给定的年份</param>
/// <param name"month">给定的月份</param>
/// <param name"day">给定的日子</param>
/// <param name"hour">给定的小时</param>
/// <param name"minute">给定的分钟</param>
/// <param name"second">给定的秒</param>
/// <returns>true:有效;false:无效</returns>
BOOL
TDateTime::ValidateDateTime(int year, int month, int day,
int hour, int minute, int second)
{
return ValidateDate(year, month, day)
&& ValidateTime(hour, minute, second);
}
BOOL
TDateTime::Validate()
{
return Validate(this);
}
BOOL
TDateTime::Validate(TDateTime *obDateTime)
{
return ValidateDateTime(obDateTime->sYear,obDateTime->sMonth, obDateTime->sDay,
obDateTime->sHour, obDateTime->sMinute, obDateTime->sSecond);
}
time_t
TDateTime::ToUnixDatetime()
{
tm tt;
tt.tm_year sYear - 1900;
tt.tm_mon sMonth -1;
tt.tm_mday sDay;
tt.tm_hour sHour;
tt.tm_min sMinute;
tt.tm_sec sSecond;
return mktime(&tt);
}
测试工程文件:
// parsedt.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "tdatetime.h"
//注意:在给定参数时,日期和时间中间有空格分隔,故需要有引号限定
//如:exe "2008-11-21 22:23:59"
//在UNIX下可以使用“\”进行转义
//如:exe 2008-11-21\ 22:23:59
int main(int argc, char** argv)
{
TDateTime dtm;
if (argc<2){
printf("parsedt datetime_string");
return 1;
}
if (!dtm.ParseDateTimeString(argv[1])){
printf("Error!\n");
return 1;
}
printf("year:%d, month:%d, day:%d, hour:%d, minute:%d, second:%d\n",
dtm.sYear, dtm.sMonth, dtm.sDay, dtm.sHour, dtm.sMinute, dtm.sSecond);
TDateTime dtm2(dtm.ToUnixDatetime());
printf("year:%d, month:%d, day:%d, hour:%d, minute:%d, second:%d\n",
dtm2.sYear, dtm2.sMonth, dtm2.sDay, dtm2.sHour, dtm2.sMinute, dtm2.sSecond);
return 0;
}
VS2005下编译通过。该代码没有平台相关性,可以在UNIX下编译。
责任编辑:小草