JavaScriptCore/runtime/DateConversion.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
       
     3  * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
       
     4  * Copyright (C) 2009 Google Inc. All rights reserved.
       
     5  *
       
     6  * The Original Code is Mozilla Communicator client code, released
       
     7  * March 31, 1998.
       
     8  *
       
     9  * The Initial Developer of the Original Code is
       
    10  * Netscape Communications Corporation.
       
    11  * Portions created by the Initial Developer are Copyright (C) 1998
       
    12  * the Initial Developer. All Rights Reserved.
       
    13  *
       
    14  * This library is free software; you can redistribute it and/or
       
    15  * modify it under the terms of the GNU Lesser General Public
       
    16  * License as published by the Free Software Foundation; either
       
    17  * version 2.1 of the License, or (at your option) any later version.
       
    18  *
       
    19  * This library is distributed in the hope that it will be useful,
       
    20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    22  * Lesser General Public License for more details.
       
    23  *
       
    24  * You should have received a copy of the GNU Lesser General Public
       
    25  * License along with this library; if not, write to the Free Software
       
    26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
       
    27  *
       
    28  * Alternatively, the contents of this file may be used under the terms
       
    29  * of either the Mozilla Public License Version 1.1, found at
       
    30  * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public
       
    31  * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html
       
    32  * (the "GPL"), in which case the provisions of the MPL or the GPL are
       
    33  * applicable instead of those above.  If you wish to allow use of your
       
    34  * version of this file only under the terms of one of those two
       
    35  * licenses (the MPL or the GPL) and not to allow others to use your
       
    36  * version of this file under the LGPL, indicate your decision by
       
    37  * deletingthe provisions above and replace them with the notice and
       
    38  * other provisions required by the MPL or the GPL, as the case may be.
       
    39  * If you do not delete the provisions above, a recipient may use your
       
    40  * version of this file under any of the LGPL, the MPL or the GPL.
       
    41  */
       
    42 
       
    43 #include "config.h"
       
    44 #include "DateConversion.h"
       
    45 
       
    46 #include "CallFrame.h"
       
    47 #include "UString.h"
       
    48 #include <wtf/DateMath.h>
       
    49 #include <wtf/StringExtras.h>
       
    50 
       
    51 using namespace WTF;
       
    52 
       
    53 namespace JSC {
       
    54 
       
    55 double parseDate(ExecState* exec, const UString &date)
       
    56 {
       
    57     if (date == exec->globalData().cachedDateString)
       
    58         return exec->globalData().cachedDateStringValue;
       
    59     double value = parseDateFromNullTerminatedCharacters(exec, date.UTF8String().data());
       
    60     exec->globalData().cachedDateString = date;
       
    61     exec->globalData().cachedDateStringValue = value;
       
    62     return value;
       
    63 }
       
    64 
       
    65 void formatDate(const GregorianDateTime &t, DateConversionBuffer& buffer)
       
    66 {
       
    67     snprintf(buffer, DateConversionBufferSize, "%s %s %02d %04d",
       
    68         weekdayName[(t.weekDay + 6) % 7],
       
    69         monthName[t.month], t.monthDay, t.year + 1900);
       
    70 }
       
    71 
       
    72 void formatDateUTCVariant(const GregorianDateTime &t, DateConversionBuffer& buffer)
       
    73 {
       
    74     snprintf(buffer, DateConversionBufferSize, "%s, %02d %s %04d",
       
    75         weekdayName[(t.weekDay + 6) % 7],
       
    76         t.monthDay, monthName[t.month], t.year + 1900);
       
    77 }
       
    78 
       
    79 void formatTime(const GregorianDateTime &t, DateConversionBuffer& buffer)
       
    80 {
       
    81     int offset = abs(gmtoffset(t));
       
    82     char timeZoneName[70];
       
    83     struct tm gtm = t;
       
    84     strftime(timeZoneName, sizeof(timeZoneName), "%Z", &gtm);
       
    85 
       
    86     if (timeZoneName[0]) {
       
    87         snprintf(buffer, DateConversionBufferSize, "%02d:%02d:%02d GMT%c%02d%02d (%s)",
       
    88             t.hour, t.minute, t.second,
       
    89             gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, timeZoneName);
       
    90     } else {
       
    91         snprintf(buffer, DateConversionBufferSize, "%02d:%02d:%02d GMT%c%02d%02d",
       
    92             t.hour, t.minute, t.second,
       
    93             gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60);
       
    94     }
       
    95 }
       
    96 
       
    97 void formatTimeUTC(const GregorianDateTime &t, DateConversionBuffer& buffer)
       
    98 {
       
    99     snprintf(buffer, DateConversionBufferSize, "%02d:%02d:%02d GMT", t.hour, t.minute, t.second);
       
   100 }
       
   101 
       
   102 } // namespace JSC