Annotation of parser3/src/types/pa_vdate.h, revision 1.68

1.1       parser      1: /** @file
                      2:        Parser: @b date parser class decl.
                      3: 
1.67      moko        4:        Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com)
                      5:        Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
1.1       parser      6: */
                      7: 
                      8: #ifndef PA_VDATE_H
                      9: #define PA_VDATE_H
1.11      paf        10: 
1.68    ! moko       11: #define IDENT_PA_VDATE_H "$Id: pa_vdate.h,v 1.67 2023/09/26 20:49:12 moko Exp $"
1.1       parser     12: 
                     13: #include "classes.h"
                     14: #include "pa_common.h"
                     15: #include "pa_vstateless_object.h"
1.56      moko       16: #include "pa_vdouble.h"
1.1       parser     17: 
1.9       paf        18: // defines
                     19: 
                     20: #define VDATE_TYPE "date"
1.20      paf        21: 
1.58      moko       22: //#define PA_DATE64
                     23: 
                     24: #ifdef PA_DATE64
                     25: #define pa_time_t time_t
                     26: #else
                     27: #define pa_time_t double
                     28: #endif
                     29: 
                     30: #define SECS_PER_DAY 86400L
                     31: 
1.9       paf        32: // externs
                     33: 
1.25      paf        34: extern Methoded* date_class;
1.1       parser     35: 
1.58      moko       36: /// value of type 'date'.
1.25      paf        37: class VDate: public VStateless_object {
1.1       parser     38: public: // Value
                     39: 
1.25      paf        40:        override const char* type() const { return VDATE_TYPE; }
                     41:        override VStateless_class *get_class() { return date_class; }
1.10      paf        42:        
1.51      misha      43:        /// VDate: json-string
1.56      moko       44:        override const String* get_json_string(Json_options& options);
1.51      misha      45: 
1.1       parser     46:        /// VDate: ftime -> float days
1.54      moko       47:        override Value& as_expr_result() { return *new VDouble(as_double()); }
1.1       parser     48: 
1.46      misha      49:        /// VDate: true
                     50:        override bool is_evaluated_expr() const { return true; }
                     51: 
1.1       parser     52:        /// VDate: ftime -> float days
1.68    ! moko       53:        override double as_double() const {
        !            54:                volatile double result = ((double)ftime) / SECS_PER_DAY; // avoid x87 returns 80 bit double bug
        !            55:                return result;
        !            56:        }
1.46      misha      57: 
1.1       parser     58:        /// VDate: 0 or !0
1.25      paf        59:        override bool as_bool() const { return ftime!=0; }
1.1       parser     60: 
1.15      paf        61:        /// VDate: method,field
1.56      moko       62:        override Value* get_element(const String& aname);
1.1       parser     63: 
1.64      moko       64:        /// VDate: field
                     65:        override const VJunction* put_element(const String& aname, Value* avalue);
                     66: 
1.1       parser     67: public: // usage
                     68: 
1.58      moko       69:        VDate(pa_time_t adate) : ftz_cstr(0) {
1.33      paf        70:                set_time(adate);
1.27      paf        71:        }
1.1       parser     72: 
1.58      moko       73:        VDate(tm &tmIn) : ftz_cstr(0) {
                     74:                set_tm(tmIn);
1.32      paf        75:        }
                     76: 
1.58      moko       77:        void set_time(pa_time_t atime);
                     78:        void set_tm(tm &tmIn);
                     79:        void validate();
                     80: 
1.59      moko       81:        void set_tz(const char* atz);
                     82:        static void set_default_tz(const char* atz);
1.58      moko       83: 
                     84:        pa_time_t get_time() const { return ftime; }
                     85:        tm get_tm() const { return ftm; }
1.63      moko       86:        const char *get_tz() const { return ftz_cstr; }
1.56      moko       87: 
1.58      moko       88:        enum sql_string_type {sql_string_datetime, sql_string_date, sql_string_time};
1.62      moko       89:        enum iso_string_type {iso_string_default = 0, iso_string_ms = 1, iso_string_no_colon = 2, iso_string_no_z = 4};
1.56      moko       90: 
1.58      moko       91:        const String* get_sql_string(sql_string_type format = sql_string_datetime);
1.62      moko       92:        const String* get_iso_string(iso_string_type format = iso_string_default);
1.58      moko       93:        const String* get_gmt_string();
1.40      paf        94: 
1.44      misha      95:        struct yw {
                     96:                int year;
                     97:                int week;
                     98:        }; 
                     99:        
1.61      moko      100:        static yw CalcWeek(tm tms);
1.58      moko      101:        static int getMonthDays(int year, int month);
1.1       parser    102: 
                    103: private:
1.58      moko      104:        pa_time_t ftime;
                    105:        tm ftm;
1.27      paf       106:        const char* ftz_cstr;
1.1       parser    107: 
                    108: };
                    109: 
                    110: #endif

E-mail: