iso3307.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:1k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: iso3307.c,v 1.4 1998/09/23 17:16:11 wessels Exp $
  3.  */
  4. #include "config.h"
  5. #if HAVE_STDIO_H
  6. #include <stdio.h>
  7. #endif
  8. #if HAVE_STRING_H
  9. #include <string.h>
  10. #endif
  11. #if HAVE_CTYPE_H
  12. #include <ctype.h>
  13. #endif
  14. #if HAVE_SYS_TYPES_H
  15. #include <sys/types.h>
  16. #endif
  17. #if HAVE_TIME_H
  18. #include <time.h>
  19. #endif
  20. #if HAVE_SYS_TIME_H
  21. #include <sys/time.h>
  22. #endif
  23. #define ASCII_DIGIT(c) ((c)-48)
  24. time_t
  25. parse_iso3307_time(const char *buf)
  26. {
  27. /* buf is an ISO 3307 style time: YYYYMMDDHHMMSS or YYYYMMDDHHMMSS.xxx */
  28.     struct tm tms;
  29.     time_t t;
  30.     while (*buf == ' ' || *buf == 't')
  31. buf++;
  32.     if ((int) strlen(buf) < 14)
  33. return 0;
  34.     memset(&tms, '', sizeof(struct tm));
  35.     tms.tm_year = (ASCII_DIGIT(buf[0]) * 1000) + (ASCII_DIGIT(buf[1]) * 100) +
  36. (ASCII_DIGIT(buf[2]) * 10) + ASCII_DIGIT(buf[3]) - 1900;
  37.     tms.tm_mon = (ASCII_DIGIT(buf[4]) * 10) + ASCII_DIGIT(buf[5]) - 1;
  38.     tms.tm_mday = (ASCII_DIGIT(buf[6]) * 10) + ASCII_DIGIT(buf[7]);
  39.     tms.tm_hour = (ASCII_DIGIT(buf[8]) * 10) + ASCII_DIGIT(buf[9]);
  40.     tms.tm_min = (ASCII_DIGIT(buf[10]) * 10) + ASCII_DIGIT(buf[11]);
  41.     tms.tm_sec = (ASCII_DIGIT(buf[12]) * 10) + ASCII_DIGIT(buf[13]);
  42. #if HAVE_TIMEGM
  43.     t = timegm(&tms);
  44. #elif HAVE_MKTIME
  45.     t = mktime(&tms);
  46. #else
  47.     t = (time_t) 0;
  48. #endif
  49.     return t;
  50. }