1b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* Portions are Copyright (C) 2011 Google Inc */ 2b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* ***** BEGIN LICENSE BLOCK ***** 3b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Version: MPL 1.1/GPL 2.0/LGPL 2.1 4b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 5b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The contents of this file are subject to the Mozilla Public License Version 6b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 1.1 (the "License"); you may not use this file except in compliance with 7b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the License. You may obtain a copy of the License at 8b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * http://www.mozilla.org/MPL/ 9b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 10b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Software distributed under the License is distributed on an "AS IS" basis, 11b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 12b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * for the specific language governing rights and limitations under the 13b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * License. 14b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 15b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The Original Code is the Netscape Portable Runtime (NSPR). 16b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 17b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The Initial Developer of the Original Code is 18b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Netscape Communications Corporation. 19b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Portions created by the Initial Developer are Copyright (C) 1998-2000 20b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the Initial Developer. All Rights Reserved. 21b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 22b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Contributor(s): 23b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 24b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Alternatively, the contents of this file may be used under the terms of 25b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * either the GNU General Public License Version 2 or later (the "GPL"), or 26b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 27b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * in which case the provisions of the GPL or the LGPL are applicable instead 28b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * of those above. If you wish to allow use of your version of this file only 29b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * under the terms of either the GPL or the LGPL, and not to allow others to 30b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * use your version of this file under the terms of the MPL, indicate your 31b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * decision by deleting the provisions above and replace them with the notice 32b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * and other provisions required by the GPL or the LGPL. If you do not delete 33b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the provisions above, a recipient may use your version of this file under 34b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the terms of any one of the MPL, the GPL or the LGPL. 35b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 36b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * ***** END LICENSE BLOCK ***** */ 37b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 38b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 39b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat *--------------------------------------------------------------------------- 40b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 41b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * prtime.h -- 42b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 43b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * NSPR date and time functions 44b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * CVS revision 3.10 45b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * This file contains definitions of NSPR's basic types required by 46b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * prtime.cc. These types have been copied over from the following NSPR 47b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * files prtime.h, prtypes.h(CVS revision 3.35), prlong.h(CVS revision 3.13) 48b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 49b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat *--------------------------------------------------------------------------- 50b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 51b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 52b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#ifndef BASE_PRTIME_H__ 53b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define BASE_PRTIME_H__ 54b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 55b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include <stdint.h> 56b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 57b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#include "base/base_export.h" 58b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 59b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef int8_t PRInt8; 60b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef int16_t PRInt16; 61b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef int32_t PRInt32; 62b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef int64_t PRInt64; 63b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef int PRIntn; 64b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 65b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef PRIntn PRBool; 66b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_TRUE 1 67b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_FALSE 0 68b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 69b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; 70b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 71b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_ASSERT DCHECK 72b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_CALLBACK 73b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_INT16_MAX 32767 74b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define NSPR_API(__type) extern __type 75b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 7645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko/* 7745779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko * Long-long (64-bit signed integer type) support macros used by 7845779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko * PR_ImplodeTime(). 7945779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko * See http://lxr.mozilla.org/nspr/source/pr/include/prlong.h 8045779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko */ 8145779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko 8245779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko#define LL_I2L(l, i) ((l) = (PRInt64)(i)) 8345779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko#define LL_MUL(r, a, b) ((r) = (a) * (b)) 8445779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko#define LL_ADD(r, a, b) ((r) = (a) + (b)) 8545779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko#define LL_SUB(r, a, b) ((r) = (a) - (b)) 8645779228f8c9e40851cfd23f727e2bd8ffdd4714Alex Vakulenko 87b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 88b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/************************* TYPES AND CONSTANTS ************************/ 89b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 90b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 91b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_MSEC_PER_SEC 1000UL 92b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_USEC_PER_SEC 1000000UL 93b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_NSEC_PER_SEC 1000000000UL 94b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_USEC_PER_MSEC 1000UL 95b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#define PR_NSEC_PER_MSEC 1000000UL 96b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 97b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 98b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * PRTime -- 99b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 100b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * NSPR represents basic time as 64-bit signed integers relative 101b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * to midnight (00:00:00), January 1, 1970 Greenwich Mean Time (GMT). 102b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * (GMT is also known as Coordinated Universal Time, UTC.) 103b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The units of time are in microseconds. Negative times are allowed 104b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * to represent times prior to the January 1970 epoch. Such values are 105b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * intended to be exported to other systems or converted to human 106b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * readable form. 107b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 108b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Notes on porting: PRTime corresponds to time_t in ANSI C. NSPR 1.0 109b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * simply uses PRInt64. 110b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 111b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 112b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef PRInt64 PRTime; 113b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 114b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 115b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Time zone and daylight saving time corrections applied to GMT to 116b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * obtain the local time of some geographic location 117b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 118b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 119b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef struct PRTimeParameters { 120b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tp_gmt_offset; /* the offset from GMT in seconds */ 121b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tp_dst_offset; /* contribution of DST in seconds */ 122b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} PRTimeParameters; 123b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 124b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 125b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * PRExplodedTime -- 126b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 127b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Time broken down into human-readable components such as year, month, 128b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * day, hour, minute, second, and microsecond. Time zone and daylight 129b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * saving time corrections may be applied. If they are applied, the 130b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * offsets from the GMT must be saved in the 'tm_params' field so that 131b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * all the information is available to reconstruct GMT. 132b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 133b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Notes on porting: PRExplodedTime corrresponds to struct tm in 134b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * ANSI C, with the following differences: 135b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - an additional field tm_usec; 136b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - replacing tm_isdst by tm_params; 137b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - the month field is spelled tm_month, not tm_mon; 138b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - we use absolute year, AD, not the year since 1900. 139b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The corresponding type in NSPR 1.0 is called PRTime. Below is 140b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * a table of date/time type correspondence in the three APIs: 141b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * API time since epoch time in components 142b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * ANSI C time_t struct tm 143b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * NSPR 1.0 PRInt64 PRTime 144b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * NSPR 2.0 PRTime PRExplodedTime 145b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 146b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 147b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef struct PRExplodedTime { 148b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_usec; /* microseconds past tm_sec (0-99999) */ 149b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_sec; /* seconds past tm_min (0-61, accomodating 150b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat up to two leap seconds) */ 151b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_min; /* minutes past tm_hour (0-59) */ 152b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_hour; /* hours past tm_day (0-23) */ 153b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_mday; /* days past tm_mon (1-31, note that it 154b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat starts from 1) */ 155b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt32 tm_month; /* months past tm_year (0-11, Jan = 0) */ 156b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt16 tm_year; /* absolute year, AD (note that we do not 157b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat count from 1900) */ 158b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 159b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt8 tm_wday; /* calculated day of the week 160b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat (0-6, Sun = 0) */ 161b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRInt16 tm_yday; /* calculated day of the year 162b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat (0-365, Jan 1 = 0) */ 163b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 164b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRTimeParameters tm_params; /* time parameters used by conversion */ 165b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat} PRExplodedTime; 166b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 167b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 168b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * PRTimeParamFn -- 169b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 170b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * A function of PRTimeParamFn type returns the time zone and 171b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * daylight saving time corrections for some geographic location, 172b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * given the current time in GMT. The input argument gmt should 173b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * point to a PRExplodedTime that is in GMT, i.e., whose 174b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * tm_params contains all 0's. 175b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 176b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * For any time zone other than GMT, the computation is intended to 177b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * consist of two steps: 178b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - Figure out the time zone correction, tp_gmt_offset. This number 179b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * usually depends on the geographic location only. But it may 180b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * also depend on the current time. For example, all of China 181b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * is one time zone right now. But this situation may change 182b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * in the future. 183b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - Figure out the daylight saving time correction, tp_dst_offset. 184b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * This number depends on both the geographic location and the 185b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * current time. Most of the DST rules are expressed in local 186b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * current time. If so, one should apply the time zone correction 187b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * to GMT before applying the DST rules. 188b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 189b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 190b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erattypedef PRTimeParameters (PR_CALLBACK *PRTimeParamFn)(const PRExplodedTime *gmt); 191b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 192b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 193b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/****************************** FUNCTIONS *****************************/ 194b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 195b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 196b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratNSPR_API(PRTime) 197b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratPR_ImplodeTime(const PRExplodedTime *exploded); 198b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 199b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 200b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Adjust exploded time to normalize field overflows after manipulation. 201b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Note that the following fields of PRExplodedTime should not be 202b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * manipulated: 203b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - tm_month and tm_year: because the number of days in a month and 204b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * number of days in a year are not constant, it is ambiguous to 205b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * manipulate the month and year fields, although one may be tempted 206b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * to. For example, what does "a month from January 31st" mean? 207b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * - tm_wday and tm_yday: these fields are calculated by NSPR. Users 208b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * should treat them as "read-only". 209b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 210b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 211b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratNSPR_API(void) PR_NormalizeTime( 212b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRExplodedTime *exploded, PRTimeParamFn params); 213b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 214b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 215b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/*********************** TIME PARAMETER FUNCTIONS *********************/ 216b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/**********************************************************************/ 217b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 218b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* Time parameters that represent Greenwich Mean Time */ 219b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratNSPR_API(PRTimeParameters) PR_GMTParameters(const PRExplodedTime *gmt); 220b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 221b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 222b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * This parses a time/date string into a PRTime 223b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * (microseconds after "1-Jan-1970 00:00:00 GMT"). 224b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * It returns PR_SUCCESS on success, and PR_FAILURE 225b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * if the time/date string can't be parsed. 226b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 227b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Many formats are handled, including: 228b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 229b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 14 Apr 89 03:20:12 230b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 14 Apr 89 03:20 GMT 231b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Fri, 17 Mar 89 4:01:33 232b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Fri, 17 Mar 89 4:01 GMT 233b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Mon Jan 16 16:12 PDT 1989 234b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Mon Jan 16 16:12 +0130 1989 235b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 6 May 1992 16:41-JST (Wednesday) 236b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 22-AUG-1993 10:59:12.82 237b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 22-AUG-1993 10:59pm 238b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 22-AUG-1993 12:59am 239b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 22-AUG-1993 12:59 PM 240b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * Friday, August 04, 1995 3:54 PM 241b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 06/21/95 04:24:34 PM 242b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 20/06/95 21:07 243b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 95-06-08 19:32:48 EDT 244b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 1995-06-17T23:11:25.342156Z 245b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * 246b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * If the input string doesn't contain a description of the timezone, 247b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * we consult the `default_to_gmt' to decide whether the string should 248b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * be interpreted relative to the local time zone (PR_FALSE) or GMT (PR_TRUE). 249b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * The correct value for this argument depends on what standard specified 250b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * the time string which you are parsing. 251b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 252b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 253b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat/* 254b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * This is the only funtion that should be called from outside base, and only 255b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat * from the unit test. 256b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat */ 257b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 258b8cf94937c52feb53b55c39e3f82094d27de464cDaniel EratBASE_EXPORT PRStatus PR_ParseTimeString ( 259b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat const char *string, 260b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRBool default_to_gmt, 261b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat PRTime *result); 262b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat 263b8cf94937c52feb53b55c39e3f82094d27de464cDaniel Erat#endif // BASE_PRTIME_H__ 264