/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/*   (c) Copyright Systems Integration Specialists Company, Inc.,	*/
/*		1994 - 2003, All Rights Reserved			*/
/*									*/
/* MODULE NAME : time_str.h						*/
/* PRODUCT(S)  : 							*/
/*									*/
/* MODULE DESCRIPTION : 						*/
/*									*/
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE :				*/
/*									*/
/* MODIFICATION LOG :							*/
/*  Date     Who   Rev			Comments			*/
/* --------  ---  ------   -------------------------------------------	*/
/* 02/28/08  JRB     16    Incl "timeb.h" only in "sysincs.h"		*/
/* 11/30/06  RLH     15    merge time_str and time_str2                 */
/* 07/13/06  RLH     14    tstrTimeToStringGmt and tstrStringToTimeGmt  */
/*                         prototypes added                             */
/* 03/06/06  RLH     13    add GetTimeAndUsec, tstrTimeToStringGmt,     */
/*                         tstrStringToTimeGmt                          */
/* 07/27/04  DWL     12    Added tstrTmToString (struct tm)		*/
/* 07/16/04  DWL     11    Added tstrStringToTm (struct tm)		*/
/* 10/30/03  EJV     10    Added dataLen param to UtcValueToXmlString	*/
/* 10/15/03  JRB     09    Del _WIN32 ifdef.				*/
/* 09/01/03  GLB     08    Added "XmlStringToUtcValue" & 		*/
/*                          "UtcValueToXmlString"                       */
/* 07/12/02  NAV     07    Add UtcValsToString and UtcStringToVals      */
/* 02/02/01  EJV     06    tstrStringToTime: chg (long *) to (time_t *) */ 
/* 07/13/98  NAV     05    Add _cplusplus support			*/
/* 10/15/97  NAV     04    Add Btime4 Support Functions			*/
/* 10/08/97  NAV     03    Add seconds to TSTR_DEF_TIME_FORMAT		*/
/* 09/04/97  NAV     02    Add Btime6 Conversion routines		*/
/* 11/08/94  MDE     01    New						*/
/************************************************************************/

/************************************************************************/
/*		TIME STRING FORM FOR READ DATA				*/
/*									*/
/*  Date{ws}Time							*/
/*  Time{ws}Date	(? should we allow this)			*/
/*  Time only	(uses current time)					*/
/*  Date only	(uses current date)					*/
/*									*/
/*	Date forms :							*/
/*	 12/01/56							*/
/*	 12/01/1956							*/
/*	 12-01-56 							*/
/*	 12-01-1956 							*/
/*	 12-1-56 							*/
/*	 12-1-56	 						*/
/* 	 26-Aug-1994							*/
/* 	 26-AUG-1994							*/
/* 	 AUG-26-1993							*/
/*									*/
/*	Time forms :							*/
/*	 7:21:43P							*/
/*	 7:21:43p							*/
/*	 7:21:43a							*/
/*	 7:21:43A							*/
/*	 07:21:43a							*/
/*	 7:21:43							*/
/*	 21:21:43							*/
/*									*/
/************************************************************************/
#include "sx_defs.h"

#ifdef __cplusplus
extern "C" {
#endif


/* parms that control how a date is parsed in terms of field ordering */

#define S_DATE_ORDER_ANY    0    /* check system locale for ordering */
#define S_DATE_ORDER_MDY    1    /* date ordering is month-day-year */
#define S_DATE_ORDER_DMY    2    /* date ordering is day-month-year */
#define S_DATE_ORDER_YMD    3    /* date ordering is year-month-day */

/* number of seconds difference between 1984-01-01 and 1970-01-01. */
/* this amounts to 14 years including 3 leap-year days (1972, 1976 */
/* and 1980) converted to a number of seconds. 1984 is a leap year */
/* but the span of dates does not include 1984-02-29, so 1984's    */
/* leap-year day is not counted.                                   */

/* S_SECS_DIFF_1984_1970 is used to calculate Btime6 values. */

#define S_SECS_DIFF_1984_1970 ((((1984-1970)*365)+3) * 86400)

#define MAX_TIME_STRING_LEN 256

#define TSTR_DEF_TIME_FORMAT  "%m-%d-%Y %H:%M:%S"

extern char *tstrTimeFormat;

ST_RET tstrTimeToStringGmt (time_t t, char *dest);
ST_RET tstrStringToTimeGmt (char *src, time_t *out);

ST_RET tstrStringToTime (char *src, time_t *out);
ST_RET tstrStringToTm (char *src, struct tm *out);

ST_RET tstrTimeToString    (time_t t, char *dest);
ST_RET tstrTimeToStringGmt (time_t t, char *dest);

ST_RET tstrTmToString    (struct tm *t, char *dest);
ST_RET tstrTmToStringGmt (struct tm *t, char *dest);

#define BTIME_DEF_TIME_FORMAT "%m-%d-%Y %H:%M:%S"

ST_RET Btime6StringToVals (char *src, ST_INT32 *numDays, ST_INT32 *numMSec);
ST_RET Btime6ValsToString (char *dest, ST_INT32 numDays, ST_INT32 numMSec);

ST_RET Btime4StringToVals (char *src, ST_INT32 *numMSec);
ST_RET Btime4ValsToString (char *dest, ST_INT32 numMSec);

ST_RET UtcStringToVals (char *src, ST_UINT32 *pSecs, ST_UINT32 *pFraction, 
                        ST_UINT32 *pQflags );
ST_RET UtcValsToString (char *dest, ST_UINT32 secs, ST_UINT32 fraction, 
                        ST_UINT32 qflags);
ST_RET UtcStringToValues (char *src, ST_UINT32 *pSecs, ST_UINT32 *pFraction);
ST_RET UtcValuesToString (char *dest, ST_UINT32 secs, ST_UINT32 fraction);
ST_RET XmlStringToUtcValue (ST_CHAR *src, SX_DATE_TIME *sxDateTime);
ST_RET UtcValueToXmlString (ST_CHAR *dest, ST_UINT destLen, SX_DATE_TIME *sxDateTime);
ST_DOUBLE CalculateTimeZoneOffset (ST_VOID);
//#define UTC_DEF_TIME_FORMAT "%Y-%m-%dT%H:%M:%S"
#define UTC_DEF_TIME_FORMAT "%m-%d-%Y %H:%M:%S"
#define GET_TIME_AND_USEC_DEFINED   1
time_t GetTimeAndUsec (long *usec);

time_t usr_mkgmtime (struct tm * t);

#ifdef __cplusplus
} /* End of 'C' functions	*/

#endif

