Annotation of sbbs/src/xpdev/xpdatetime.h, revision 1.1

1.1     ! root        1: /* xpdatetime.h */
        !             2: 
        !             3: /* Cross-platform (and eXtra Precision) date/time functions */
        !             4: 
        !             5: /* $Id: xpdatetime.h,v 1.3 2008/02/23 21:05:30 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2008 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This library is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU Lesser General Public License          *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU Lesser General Public License for more details: lgpl.txt or     *
        !            18:  * http://www.fsf.org/copyleft/lesser.html                                                                     *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #ifndef _XPDATETIME_H_
        !            39: #define _XPDATETIME_H_
        !            40: 
        !            41: #include "gen_defs.h"  /* uint32_t and time_t */
        !            42: 
        !            43: #if defined(__cplusplus)
        !            44: extern "C" {
        !            45: #endif
        !            46: 
        !            47: /**************************************/
        !            48: /* Cross-platform date/time functions */
        !            49: /**************************************/
        !            50: 
        !            51: #define INVALID_TIME   (time_t)-1      /* time_t representation of an invalid date/time */
        !            52: 
        !            53: typedef struct {
        !            54:        unsigned        year;   /* 0-9999 */
        !            55:        unsigned        month;  /* 1-12 */
        !            56:        unsigned        day;    /* 1-31 */
        !            57: } xpDate_t;
        !            58: 
        !            59: typedef struct {
        !            60:        unsigned        hour;   /* 0-23 */
        !            61:        unsigned        minute; /* 0-59 */
        !            62:        float           second; /* 0.0-59.999, supports fractional seconds */
        !            63: } xpTime_t;
        !            64: 
        !            65: typedef int xpTimeZone_t;
        !            66: #define xpTimeZone_UTC         0
        !            67: #define xpTimeZone_LOCAL       1
        !            68: 
        !            69: typedef struct {
        !            70:        xpDate_t                date;
        !            71:        xpTime_t                time;
        !            72:        xpTimeZone_t    zone;   /* minutes +/- UTC */
        !            73: } xpDateTime_t;
        !            74: 
        !            75: xpDateTime_t   xpDateTime_create(unsigned year, unsigned month, unsigned day
        !            76:                                                                   ,unsigned hour, unsigned minute, float second
        !            77:                                                                   ,xpTimeZone_t);
        !            78: xpDateTime_t   xpDateTime_now(void);
        !            79: time_t                 xpDateTime_to_time(xpDateTime_t);
        !            80: xpDateTime_t   time_to_xpDateTime(time_t, xpTimeZone_t);
        !            81: xpDateTime_t   gmtime_to_xpDateTime(time_t);
        !            82: xpTimeZone_t   xpTimeZone_local(void);
        !            83: 
        !            84: /**********************************************/
        !            85: /* Decimal-coded ISO-8601 date/time functions */
        !            86: /**********************************************/
        !            87: 
        !            88: typedef uint32_t       isoDate_t;      /* CCYYMMDD (decimal) */
        !            89: typedef uint32_t       isoTime_t;      /* HHMMSS   (decimal) */
        !            90: 
        !            91: #define                        isoDate_create(year,mon,day)    (((year)*10000)+((mon)*100)+(day))
        !            92: #define                        isoTime_create(hour,min,sec)    (((hour)*10000)+((min)*100)+((unsigned)sec))
        !            93:                                
        !            94: #define                        isoDate_year(date)                              ((date)/10000)
        !            95: #define                        isoDate_month(date)                             (((date)/100)%100)
        !            96: #define                        isoDate_day(date)                               ((date)%100)
        !            97:                                                                                                
        !            98: #define                        isoTime_hour(time)                              ((time)/10000)
        !            99: #define                        isoTime_minute(time)                    (((time)/100)%100)
        !           100: #define                        isoTime_second(time)                    ((time)%100)
        !           101: 
        !           102: BOOL                   isoTimeZoneStr_parse(const char* str, xpTimeZone_t*);
        !           103: xpDateTime_t   isoDateTimeStr_parse(const char* str);
        !           104: 
        !           105: /**************************************************************/
        !           106: /* Conversion between time_t (local and GMT) and isoDate/Time */
        !           107: /**************************************************************/
        !           108: isoTime_t              time_to_isoTime(time_t);
        !           109: isoTime_t              gmtime_to_isoTime(time_t);
        !           110: isoDate_t              time_to_isoDateTime(time_t, isoTime_t*);
        !           111: isoDate_t              gmtime_to_isoDateTime(time_t, isoTime_t*);
        !           112: time_t                 isoDateTime_to_time(isoDate_t, isoTime_t);
        !           113: #define                        time_to_isoDate(t)              time_to_isoDateTime(t,NULL)
        !           114: #define                        gmtime_to_isoDate(t)    gmtime_to_isoDateTime(t,NULL)
        !           115: 
        !           116: /***************************************************/
        !           117: /* Conversion between xpDate/Time and isoDate/Time */
        !           118: /***************************************************/
        !           119: 
        !           120: #define                        xpDate_to_isoDate(date) isoDate_create((date).year,(date).month,(date).day)
        !           121: #define                        xpTime_to_isoTime(time) isoTime_create((time).hour,(time).minute,(unsigned)((time).second))
        !           122: 
        !           123: xpDateTime_t   isoDateTime_to_xpDateTime(isoDate_t, isoTime_t);
        !           124: isoDate_t              xpDateTime_to_isoDateTime(xpDateTime_t, isoTime_t*);
        !           125: 
        !           126: /*****************************************************************/
        !           127: /* Conversion from xpDate/Time/Zone to isoDate/Time/Zone Strings */
        !           128: /*****************************************************************/
        !           129: 
        !           130: /* NULL sep (separator) values are automatically replaced with ISO-standard separators */
        !           131: 
        !           132: /* precision   example output
        !           133:  * -2                  "14"
        !           134:  * -1                  "14:02"
        !           135:  * 0            "14:02:39"
        !           136:  * 1            "14.02:39.8"
        !           137:  * 2            "14.02:39.82"
        !           138:  * 3            "14.02:39.829"
        !           139:  */
        !           140: char* xpDate_to_isoDateStr(xpDate_t
        !           141:                                                ,const char* sep
        !           142:                                                ,char* str, size_t maxlen);
        !           143: char* xpTime_to_isoTimeStr(xpTime_t
        !           144:                                                ,const char* sep
        !           145:                                                ,int precision
        !           146:                                                ,char* str, size_t maxlen);
        !           147: char* xpTimeZone_to_isoTimeZoneStr(xpTimeZone_t
        !           148:                                                ,const char* sep
        !           149:                                                ,char *str, size_t maxlen);
        !           150: char* xpDateTime_to_isoDateTimeStr(xpDateTime_t
        !           151:                                                ,const char* date_sep, const char* datetime_sep, const char* time_sep
        !           152:                                                ,int precision
        !           153:                                                ,char* str, size_t maxlen);
        !           154: 
        !           155: #if defined(__cplusplus)
        !           156: }
        !           157: #endif
        !           158: 
        !           159: #endif /* Don't add anything after this line */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.