Annotation of parser3/src/types/pa_vdate.h, revision 1.70
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.70 ! moko 11: #define IDENT_PA_VDATE_H "$Id: pa_vdate.h,v 1.69 2023/10/07 01:12:26 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 {
! 60: return clip2int(trunc(as_double()));
! 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: