日期时间字符串的解析类
来源:优易学  2011-12-19 16:16:15   【优易学:中国教育考试门户网】   资料下载   IT书店

 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下编译。

上一页  [1] [2] [3] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训