home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lynx2.8.1dev.10.tar.gz / lynx2.8.1dev.10.tar / lynx2-8 / src / mktime.c < prev    next >
C/C++ Source or Header  |  1997-12-04  |  2KB  |  78 lines

  1. /*
  2.  * mktime.c -- converts a struct tm into a time_t
  3.  *
  4.  * Copyright (C) 1997 Free Software Foundation, Inc.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify it under
  7.  * the terms of the GNU General Public License as published by the Free
  8.  * Software Foundation; either version 2, or (at your option) any later
  9.  * version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  14.  * more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License along with
  17.  * this program; if not, write to the Free Software Foundation, Inc., 59
  18.  * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19.  */
  20.  
  21. /* Written by Philippe De Muyter <phdm@macqel.be>.  */
  22.  
  23. #include    <time.h>
  24.  
  25. static time_t
  26. mkgmtime(t)
  27. register struct tm    *t;
  28. {
  29.     register short    month, year;
  30.     register time_t    result;
  31.     static int    m_to_d[12] =
  32.         {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
  33.  
  34.     month = t->tm_mon;
  35.     year = t->tm_year + month / 12 + 1900;
  36.     month %= 12;
  37.     if (month < 0)
  38.     {
  39.         year -= 1;
  40.         month += 12;
  41.     }
  42.     result = (year - 1970) * 365 + (year - 1969) / 4 + m_to_d[month];
  43.     result = (year - 1970) * 365 + m_to_d[month];
  44.     if (month <= 1)
  45.         year -= 1;
  46.     result += (year - 1968) / 4;
  47.     result -= (year - 1900) / 100;
  48.     result += (year - 1600) / 400;
  49.     result += t->tm_mday;
  50.     result -= 1;
  51.     result *= 24;
  52.     result += t->tm_hour;
  53.     result *= 60;
  54.     result += t->tm_min;
  55.     result *= 60;
  56.     result += t->tm_sec;
  57.     return(result);
  58. }
  59.  
  60. /*
  61. **  mktime -- convert tm struct to time_t
  62. **        if tm_isdst >= 0 use it, else compute it
  63. */
  64.  
  65. time_t
  66. mktime(t)
  67. struct tm    *t;
  68. {
  69.     time_t    result;
  70.  
  71.     tzset();
  72.     result = mkgmtime(t) + timezone;
  73.     if (t->tm_isdst > 0
  74.     || (t->tm_isdst < 0 && localtime(&result)->tm_isdst))
  75.         result -= 3600;
  76.     return(result);
  77. }
  78.