webengine/osswebengine/JavaScriptCore/kjs/DateMath.h
changeset 0 dd21522fd290
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2  * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
       
     3  * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
       
     4  *
       
     5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
       
     6  *
       
     7  * The contents of this file are subject to the Mozilla Public License Version
       
     8  * 1.1 (the "License"); you may not use this file except in compliance with
       
     9  * the License. You may obtain a copy of the License at
       
    10  * http://www.mozilla.org/MPL/
       
    11  *
       
    12  * Software distributed under the License is distributed on an "AS IS" basis,
       
    13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
       
    14  * for the specific language governing rights and limitations under the
       
    15  * License.
       
    16  *
       
    17  * The Original Code is Mozilla Communicator client code, released
       
    18  * March 31, 1998.
       
    19  *
       
    20  * The Initial Developer of the Original Code is
       
    21  * Netscape Communications Corporation.
       
    22  * Portions created by the Initial Developer are Copyright (C) 1998
       
    23  * the Initial Developer. All Rights Reserved.
       
    24  *
       
    25  * Contributor(s):
       
    26  *
       
    27  * Alternatively, the contents of this file may be used under the terms of
       
    28  * either of the GNU General Public License Version 2 or later (the "GPL"),
       
    29  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
       
    30  * in which case the provisions of the GPL or the LGPL are applicable instead
       
    31  * of those above. If you wish to allow use of your version of this file only
       
    32  * under the terms of either the GPL or the LGPL, and not to allow others to
       
    33  * use your version of this file under the terms of the MPL, indicate your
       
    34  * decision by deleting the provisions above and replace them with the notice
       
    35  * and other provisions required by the GPL or the LGPL. If you do not delete
       
    36  * the provisions above, a recipient may use your version of this file under
       
    37  * the terms of any one of the MPL, the GPL or the LGPL.
       
    38  *
       
    39  */
       
    40 
       
    41 #ifndef DateMath_h
       
    42 #define DateMath_h
       
    43 
       
    44 #include <time.h>
       
    45 #include <string.h>
       
    46 #include <wtf/Noncopyable.h>
       
    47 #if PLATFORM(SYMBIAN)
       
    48 #include <e32std.h>
       
    49 #endif
       
    50 
       
    51 namespace KJS {
       
    52 
       
    53 struct GregorianDateTime;
       
    54 
       
    55 void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&);
       
    56 double gregorianDateTimeToMS(const GregorianDateTime&, double, bool inputIsUTC);
       
    57 double getUTCOffset();
       
    58 int equivalentYearForDST(int year);
       
    59 double getCurrentUTCTime();
       
    60 
       
    61 const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
       
    62 const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
       
    63 
       
    64 const double hoursPerDay = 24.0;
       
    65 const double minutesPerHour = 60.0;
       
    66 const double secondsPerHour = 60.0 * 60.0;
       
    67 const double secondsPerMinute = 60.0;
       
    68 const double msPerSecond = 1000.0;
       
    69 const double msPerMinute = 60.0 * 1000.0;
       
    70 const double msPerHour = 60.0 * 60.0 * 1000.0;
       
    71 const double msPerDay = 24.0 * 60.0 * 60.0 * 1000.0;
       
    72 
       
    73 // Intentionally overridding the default tm of the system
       
    74 // Not all OS' have the same members of their tm's
       
    75 struct GregorianDateTime : Noncopyable {
       
    76     GregorianDateTime()
       
    77         : second(0)
       
    78         , minute(0)
       
    79         , hour(0)
       
    80         , weekDay(0)
       
    81         , monthDay(0)
       
    82         , yearDay(0)
       
    83         , month(0)
       
    84         , year(0)
       
    85         , isDST(0)
       
    86         , utcOffset(0)
       
    87         , timeZone(0)
       
    88     {
       
    89     }
       
    90 
       
    91     ~GregorianDateTime()
       
    92     {
       
    93         delete [] timeZone;
       
    94     }
       
    95     
       
    96     GregorianDateTime(const tm& inTm)
       
    97         : second(inTm.tm_sec)
       
    98         , minute(inTm.tm_min)
       
    99         , hour(inTm.tm_hour)
       
   100         , weekDay(inTm.tm_wday)
       
   101         , monthDay(inTm.tm_mday)
       
   102         , yearDay(inTm.tm_yday)
       
   103         , month(inTm.tm_mon)
       
   104         , year(inTm.tm_year)
       
   105         , isDST(inTm.tm_isdst)
       
   106     {
       
   107 #if !PLATFORM(WIN_OS) && !PLATFORM(SYMBIAN)
       
   108         utcOffset = static_cast<int>(inTm.tm_gmtoff);
       
   109 
       
   110         int inZoneSize = strlen(inTm.tm_zone) + 1;
       
   111         timeZone = new char[inZoneSize];
       
   112         strncpy(timeZone, inTm.tm_zone, inZoneSize);
       
   113 #elif PLATFORM(SYMBIAN)
       
   114         utcOffset = User::UTCOffset().Int();
       
   115         timeZone = 0;
       
   116 #else
       
   117         utcOffset = static_cast<int>(getUTCOffset() / msPerSecond + (isDST ? secondsPerHour : 0));
       
   118         timeZone = 0;
       
   119 #endif
       
   120     }
       
   121 
       
   122     operator tm() const
       
   123     {
       
   124         tm ret;
       
   125         memset(&ret, 0, sizeof(ret));
       
   126 
       
   127         ret.tm_sec   =  second;
       
   128         ret.tm_min   =  minute;
       
   129         ret.tm_hour  =  hour;
       
   130         ret.tm_wday  =  weekDay;
       
   131         ret.tm_mday  =  monthDay;
       
   132         ret.tm_yday  =  yearDay;
       
   133         ret.tm_mon   =  month;
       
   134         ret.tm_year  =  year;
       
   135         ret.tm_isdst =  isDST;
       
   136 
       
   137 #if !PLATFORM(WIN_OS) && !PLATFORM(SYMBIAN)
       
   138         ret.tm_gmtoff = static_cast<long>(utcOffset);
       
   139         ret.tm_zone = timeZone;
       
   140 #endif
       
   141 
       
   142         return ret;
       
   143     }
       
   144 
       
   145     int second;
       
   146     int minute;
       
   147     int hour;
       
   148     int weekDay;
       
   149     int monthDay;
       
   150     int yearDay;
       
   151     int month;
       
   152     int year;
       
   153     int isDST;
       
   154     int utcOffset;
       
   155     char* timeZone;
       
   156 };
       
   157 
       
   158 }   //namespace KJS
       
   159 
       
   160 #endif // DateMath_h