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

1.1       parser      1: /** @file
                      2:        Parser: @b date parser class decl.
                      3: 
1.71      moko        4:        Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com)
1.67      moko        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.72    ! moko       11: #define IDENT_PA_VDATE_H "$Id: pa_vdate.h,v 1.71 2024/11/04 03:53:25 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 {
1.69      moko       54:                volatile double result = ((double)ftime) / SECS_PER_DAY; // avoid x87 returns 80 bit double
1.68      moko       55:                return result;
                     56:        }
1.46      misha      57: 
1.70      moko       58:        /// VDate: ftime -> int days
                     59:        override int as_int() const {
1.72    ! moko       60:                return trunc(as_double());
1.70      moko       61:        }
                     62: 
1.1       parser     63:        /// VDate: 0 or !0
1.25      paf        64:        override bool as_bool() const { return ftime!=0; }
1.1       parser     65: 
1.15      paf        66:        /// VDate: method,field
1.56      moko       67:        override Value* get_element(const String& aname);
1.1       parser     68: 
1.64      moko       69:        /// VDate: field
                     70:        override const VJunction* put_element(const String& aname, Value* avalue);
                     71: 
1.1       parser     72: public: // usage
                     73: 
1.58      moko       74:        VDate(pa_time_t adate) : ftz_cstr(0) {
1.33      paf        75:                set_time(adate);
1.27      paf        76:        }
1.1       parser     77: 
1.58      moko       78:        VDate(tm &tmIn) : ftz_cstr(0) {
                     79:                set_tm(tmIn);
1.32      paf        80:        }
                     81: 
1.58      moko       82:        void set_time(pa_time_t atime);
                     83:        void set_tm(tm &tmIn);
                     84:        void validate();
                     85: 
1.59      moko       86:        void set_tz(const char* atz);
                     87:        static void set_default_tz(const char* atz);
1.58      moko       88: 
                     89:        pa_time_t get_time() const { return ftime; }
                     90:        tm get_tm() const { return ftm; }
1.63      moko       91:        const char *get_tz() const { return ftz_cstr; }
1.56      moko       92: 
1.58      moko       93:        enum sql_string_type {sql_string_datetime, sql_string_date, sql_string_time};
1.62      moko       94:        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       95: 
1.58      moko       96:        const String* get_sql_string(sql_string_type format = sql_string_datetime);
1.62      moko       97:        const String* get_iso_string(iso_string_type format = iso_string_default);
1.58      moko       98:        const String* get_gmt_string();
1.40      paf        99: 
1.44      misha     100:        struct yw {
                    101:                int year;
                    102:                int week;
                    103:        }; 
                    104:        
1.61      moko      105:        static yw CalcWeek(tm tms);
1.58      moko      106:        static int getMonthDays(int year, int month);
1.1       parser    107: 
                    108: private:
1.58      moko      109:        pa_time_t ftime;
                    110:        tm ftm;
1.27      paf       111:        const char* ftz_cstr;
1.1       parser    112: 
                    113: };
                    114: 
                    115: #endif

E-mail: