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

  //过滤尾部空格
  while((len>0) && (' ' szDateTime[len]))
  len--;
  if (len<0) return FALSE;
  while(len>0){
  char c szDateTime[len];
  switch( GetTokenType(c))
  {
  case TT_Null: goto ParseDateTimeString_FALSE;
  case TT_Number:
  switch(timePart)
  {
  case TP_Second:
  if (second<0 )
  second c-'0';
  else
  second + (c-'0') * pw;
  pw * 10;
  break;
  case TP_Minute:
  if (minute<0 )
  minute c-'0';
  else
  minute + (c-'0') * pw;
  pw * 10;
  break;
  case TP_Hour:
  if (hour<0 )
  hour c-'0';
  else
  hour + (c-'0') * pw;
  pw * 10;
  break;
  case TP_Day:
  if (day<0 )
  day c-'0';
  else
  day + (c-'0') * pw;
  pw * 10;
  break;
  case TP_Month:
  if (month<0 )
  month c-'0';
  else
  month + (c-'0') * pw;
  pw * 10;
  break;
  case TP_Year:
  if (year<0 )
  year c-'0';
  else
  year + (c-'0') * pw;
  pw * 10;
  break;
  default:
  return FALSE;
  }
  break;
  case TT_Minus:
  switch(timePart)
  {
  case TP_Second: //如果没有给定时间信息,则跳过,直接升级到日期
  pw 1;
  timePart TP_Month; //提升
  day second;
  second -1; //将解析到的秒信息改为日期信息
  break;
  case TP_Minute: goto ParseDateTimeString_FALSE;
  case TP_Hour: goto ParseDateTimeString_FALSE;
  case TP_Day:
  pw 1;
  timePart TP_Month; //提升
  break;
  case TP_Month:
  pw 1;
  timePart TP_Year; //提升
  break;
  case TP_Year: goto ParseDateTimeString_FALSE;
  default: goto ParseDateTimeString_FALSE;
  }
  break;
  case TT_Colon:
  switch(timePart)
  {
  case TP_Second:
  pw 1;
  timePart TP_Minute; //提升
  break;
  case TP_Minute:
  pw 1;
  timePart TP_Hour; //提升
  break;
  case TP_Hour: goto ParseDateTimeString_FALSE;
  case TP_Day: goto ParseDateTimeString_FALSE;
  case TP_Month: goto ParseDateTimeString_FALSE;
  case TP_Year: goto ParseDateTimeString_FALSE;
  default: goto ParseDateTimeString_FALSE;
  }
  break;
  case TT_Blank:
  if (TP_Hour timePart){
  timePart TP_Day; //提升
  pw 1;
  }else if (TP_Year timePart){ //前导空格
  goto ParseDateTimeString_OK;//认为结束
  }else{//在其他部分不能出现空格
  goto ParseDateTimeString_FALSE;
  }
  break;
  }
  len -- ;
  }
  ParseDateTimeString_OK:
  if (year>0)
  sYear year;
  if (month>0)
  sMonth month;
  if (day>0)
  sDay day;
  if (hour>0)
  sHour hour;
  if (minute>0)
  sMinute minute;
  if (second>0)
  sSecond second;
  if (Validate()){
  return TRUE;
  }else{
  ZeroDateTime();
  return FALSE;
  }
  ParseDateTimeString_FALSE:
  ZeroDateTime();
  return FALSE;
  }
  BOOL
  TDateTime::LoadCurrentDateTime()
  {
  time_t t;
  time(&t);
  FromUnixDatetime(t);
  return TRUE;
  }
  void
  TDateTime::FromUnixDatetime(time_t t)
  {
  t + TIMEZONE_8;
  struct tm *tt gmtime( &t);
  sYear tt->tm_year+1900;
  sMonth tt->tm_mon+1;
  sDay tt->tm_mday;
  sHour tt->tm_hour;
  sMinute tt->tm_min;
  sSecond tt->tm_sec;
  //free(tt);
  }
  void
  TDateTime::ZeroDateTime(void)
  {
  sYear 0;
  sMonth 0;
  sDay 0;
  sHour 0;
  sMinute 0;
  sSecond 0;
  }
  /// <summary>
  /// 判定给定的年份是否是润年
  /// </summary>
  /// <param name"year">需要判定的年份</param>
  /// <returns>true:给定的年份是润年。false:给定的年份不是润年。</returns>

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

责任编辑:小草

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