15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License Version 1.1 (the "License"); you may not use this file 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * except in compliance with the License. You may obtain a copy of 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License at http://www.mozilla.org/MPL/ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implied. See the License for the specific language governing 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * rights and limitations under the License. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR). 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is Netscape 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Communications Corporation. Portions created by Netscape are 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1998-2000 Netscape Communications Corporation. All 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Rights Reserved. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s): 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * terms of the GNU General Public License Version 2 or later (the 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "GPL"), in which case the provisions of the GPL are applicable 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * instead of those above. If you wish to allow use of your 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version of this file only under the terms of the GPL and not to 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * allow others to use your version of this file under the MPL, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicate your decision by deleting the provisions above and 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * replace them with the notice and other provisions required by 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GPL. If you do not delete the provisions above, a recipient 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may use your version of this file under either the MPL or the 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GPL. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *---------------------------------------------------------------------- 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * prtime.h -- 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NSPR date and time functions 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *----------------------------------------------------------------------- 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prtime_h___ 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prtime_h___ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prlong.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_BEGIN_EXTERN_C 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************* TYPES AND CONSTANTS ************************/ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MSEC_PER_SEC 1000UL 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_USEC_PER_SEC 1000000UL 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NSEC_PER_SEC 1000000000UL 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_USEC_PER_MSEC 1000UL 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_NSEC_PER_MSEC 1000000UL 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PRTime -- 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NSPR represents basic time as 64-bit signed integers relative 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to midnight (00:00:00), January 1, 1970 Greenwich Mean Time (GMT). 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (GMT is also known as Coordinated Universal Time, UTC.) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The units of time are in microseconds. Negative times are allowed 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to represent times prior to the January 1970 epoch. Such values are 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * intended to be exported to other systems or converted to human 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * readable form. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Notes on porting: PRTime corresponds to time_t in ANSI C. NSPR 1.0 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * simply uses PRInt64. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PRTime; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Time zone and daylight saving time corrections applied to GMT to 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * obtain the local time of some geographic location 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct PRTimeParameters { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tp_gmt_offset; /* the offset from GMT in seconds */ 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tp_dst_offset; /* contribution of DST in seconds */ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PRTimeParameters; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PRExplodedTime -- 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Time broken down into human-readable components such as year, month, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * day, hour, minute, second, and microsecond. Time zone and daylight 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * saving time corrections may be applied. If they are applied, the 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * offsets from the GMT must be saved in the 'tm_params' field so that 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all the information is available to reconstruct GMT. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Notes on porting: PRExplodedTime corrresponds to struct tm in 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANSI C, with the following differences: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - an additional field tm_usec; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - replacing tm_isdst by tm_params; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the month field is spelled tm_month, not tm_mon; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - we use absolute year, AD, not the year since 1900. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The corresponding type in NSPR 1.0 is called PRTime. Below is 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * a table of date/time type correspondence in the three APIs: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * API time since epoch time in components 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ANSI C time_t struct tm 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NSPR 1.0 PRInt64 PRTime 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NSPR 2.0 PRTime PRExplodedTime 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct PRExplodedTime { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_usec; /* microseconds past tm_sec (0-99999) */ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_sec; /* seconds past tm_min (0-61, accomodating 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) up to two leap seconds) */ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_min; /* minutes past tm_hour (0-59) */ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_hour; /* hours past tm_day (0-23) */ 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_mday; /* days past tm_mon (1-31, note that it 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) starts from 1) */ 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt32 tm_month; /* months past tm_year (0-11, Jan = 0) */ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt16 tm_year; /* absolute year, AD (note that we do not 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) count from 1900) */ 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt8 tm_wday; /* calculated day of the week 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (0-6, Sun = 0) */ 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRInt16 tm_yday; /* calculated day of the year 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (0-365, Jan 1 = 0) */ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRTimeParameters tm_params; /* time parameters used by conversion */ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PRExplodedTime; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PRTimeParamFn -- 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A function of PRTimeParamFn type returns the time zone and 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * daylight saving time corrections for some geographic location, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * given the current time in GMT. The input argument gmt should 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * point to a PRExplodedTime that is in GMT, i.e., whose 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * tm_params contains all 0's. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any time zone other than GMT, the computation is intended to 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * consist of two steps: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Figure out the time zone correction, tp_gmt_offset. This number 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * usually depends on the geographic location only. But it may 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * also depend on the current time. For example, all of China 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is one time zone right now. But this situation may change 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the future. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Figure out the daylight saving time correction, tp_dst_offset. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This number depends on both the geographic location and the 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * current time. Most of the DST rules are expressed in local 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * current time. If so, one should apply the time zone correction 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to GMT before applying the DST rules. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRTimeParameters (PR_CALLBACK *PRTimeParamFn)(const PRExplodedTime *gmt); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/****************************** FUNCTIONS *****************************/ 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The PR_Now routine returns the current time relative to the 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * epoch, midnight, January 1, 1970 UTC. The units of the returned 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * value are microseconds since the epoch. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The values returned are not guaranteed to advance in a linear fashion 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * due to the application of time correction protocols which synchronize 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * computer clocks to some external time source. Consequently it should 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * not be depended on for interval timing. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The implementation is machine dependent. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Cf. time_t time(time_t *tp) in ANSI C. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(HAVE_WATCOM_BUG_2) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PRTime __pascal __export __loadds 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRTime) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_Now(void); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Expand time binding it to time parameters provided by PRTimeParamFn. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The calculation is envisoned to proceed in the following steps: 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - From given PRTime, calculate PRExplodedTime in GMT 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Apply the given PRTimeParamFn to the GMT that we just calculated 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to obtain PRTimeParameters. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Add the PRTimeParameters offsets to GMT to get the local time 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * as PRExplodedTime. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(void) PR_ExplodeTime( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRTime usecs, PRTimeParamFn params, PRExplodedTime *exploded); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Reverse operation of PR_ExplodeTime */ 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(HAVE_WATCOM_BUG_2) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PRTime __pascal __export __loadds 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRTime) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_ImplodeTime(const PRExplodedTime *exploded); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adjust exploded time to normalize field overflows after manipulation. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Note that the following fields of PRExplodedTime should not be 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * manipulated: 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - tm_month and tm_year: because the number of days in a month and 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * number of days in a year are not constant, it is ambiguous to 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * manipulate the month and year fields, although one may be tempted 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to. For example, what does "a month from January 31st" mean? 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - tm_wday and tm_yday: these fields are calculated by NSPR. Users 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * should treat them as "read-only". 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(void) PR_NormalizeTime( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRExplodedTime *exploded, PRTimeParamFn params); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************** TIME PARAMETER FUNCTIONS *********************/ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Time parameters that suit current host machine */ 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRTimeParameters) PR_LocalTimeParameters(const PRExplodedTime *gmt); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Time parameters that represent Greenwich Mean Time */ 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRTimeParameters) PR_GMTParameters(const PRExplodedTime *gmt); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Time parameters that represent the US Pacific Time Zone, with the 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * current daylight saving time rules (for testing only) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRTimeParameters) PR_USPacificTimeParameters(const PRExplodedTime *gmt); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This parses a time/date string into a PRTime 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (microseconds after "1-Jan-1970 00:00:00 GMT"). 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It returns PR_SUCCESS on success, and PR_FAILURE 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * if the time/date string can't be parsed. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Many formats are handled, including: 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14 Apr 89 03:20:12 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 14 Apr 89 03:20 GMT 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fri, 17 Mar 89 4:01:33 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Fri, 17 Mar 89 4:01 GMT 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Mon Jan 16 16:12 PDT 1989 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Mon Jan 16 16:12 +0130 1989 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6 May 1992 16:41-JST (Wednesday) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22-AUG-1993 10:59:12.82 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22-AUG-1993 10:59pm 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22-AUG-1993 12:59am 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 22-AUG-1993 12:59 PM 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Friday, August 04, 1995 3:54 PM 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 06/21/95 04:24:34 PM 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 20/06/95 21:07 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 95-06-08 19:32:48 EDT 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If the input string doesn't contain a description of the timezone, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * we consult the `default_to_gmt' to decide whether the string should 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * be interpreted relative to the local time zone (PR_FALSE) or GMT (PR_TRUE). 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The correct value for this argument depends on what standard specified 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the time string which you are parsing. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRStatus) PR_ParseTimeString ( 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *string, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRBool default_to_gmt, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRTime *result); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FIXME: should we also have a formatting function, such as asctime, ctime, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and strftime in standard C library? But this would involve 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * internationalization issues. Might want to provide a US English version. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************** OLD COMPATIBILITYFUNCTIONS *******************/ 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**********************************************************************/ 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NO_NSPR_10_SUPPORT 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Format a time value into a buffer. Same semantics as strftime() */ 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRUint32) PR_FormatTime(char *buf, int buflen, const char *fmt, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PRExplodedTime *tm); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Format a time value into a buffer. Time is always in US English format, regardless 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of locale setting. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NSPR_API(PRUint32) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_FormatTimeUSEnglish( char* buf, PRUint32 bufSize, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* format, const PRExplodedTime* tm ); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NO_NSPR_10_SUPPORT */ 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_END_EXTERN_C 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prtime_h___ */ 296