1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_dbms_TimeStamp_hpp
10 #define anna_dbms_TimeStamp_hpp
12 #include <anna/dbms/Date.hpp>
19 Tipo de datos que permite trabajar con el tipo de dato 'TimeStamp' de un gestor de base de
22 El tipo de dato TimeStamp contiene la información suficiente para representar una fecha
23 incluyendo la hora del día.
25 class TimeStamp : public Date {
29 \param isNulleable Indica si el dato puede tomar valores nulos.
30 \param format Formato usado para interpretar los datos de esta fecha, en los metodos Date::getCStringValue y
31 Date::setValue (const char*) y Date::setValue (const std::string&). Sigue la especificacion:
34 %a Replaced by the localeâs abbreviated weekday name. [ tm_wday]
36 %A Replaced by the localeâs full weekday name. [ tm_wday]
38 %b Replaced by the localeâs abbreviated month name. [ tm_mon]
40 %B Replaced by the localeâs full month name. [ tm_mon]
42 %c Replaced by the locale's appropriate date and time representation. (See the Base Definitions volume of
43 IEEE Std 1003.1-2001, <time.h>.)
45 %C Replaced by the year divided by 100 and truncated to an integer, as a decimal number [00,99]. [ tm_year]
47 %d Replaced by the day of the month as a decimal number [01,31]. [ tm_mday]
49 %D Equivalent to %m / %d / %y . [ tm_mon, tm_mday, tm_year]
51 %e Replaced by the day of the month as a decimal number [1,31]; a single digit is preceded by a space. [
54 %F Equivalent to %Y - %m - %d (the ISO 8601:2000 standard date format). [ tm_year, tm_mon, tm_mday]
56 %g Replaced by the last 2 digits of the week-based year (see below) as a decimal number [00,99]. [ tm_year,
59 %G Replaced by the week-based year (see below) as a decimal number (for example, 1977). [ tm_year, tm_wday,
62 %h Equivalent to %b . [ tm_mon]
64 %H Replaced by the hour (24-hour clock) as a decimal number [00,23]. [ tm_hour]
66 %I Replaced by the hour (12-hour clock) as a decimal number [01,12]. [ tm_hour]
68 %j Replaced by the day of the year as a decimal number [001,366]. [ tm_yday]
70 %m Replaced by the month as a decimal number [01,12]. [ tm_mon]
72 %M Replaced by the minute as a decimal number [00,59]. [ tm_min]
74 %n Replaced by a <newline>.
76 %p Replaced by the locale's equivalent of either a.m. or p.m. [ tm_hour]
78 %r Replaced by the time in a.m. and p.m. notation; in the POSIX locale this shall be equivalent to %I : %M
79 : %S %p . [ tm_hour, tm_min, tm_sec]
81 %R Replaced by the time in 24-hour notation ( %H : %M ). [ tm_hour, tm_min]
83 %S Replaced by the second as a decimal number [00,60]. [ tm_sec]
85 %t Replaced by a <tab>.
87 %T Replaced by the time ( %H : %M : %S ). [ tm_hour, tm_min, tm_sec]
89 %u Replaced by the weekday as a decimal number [1,7], with 1 representing Monday. [ tm_wday]
91 %U Replaced by the week number of the year as a decimal number [00,53]. The first Sunday of January is the
92 first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
94 %V Replaced by the week number of the year (Monday as the first day of the week) as a decimal number [01,53].
95 If the week containing 1 January has four or more days in the new year, then it is considered week 1. Oth-
96 erwise, it is the last week of the previous year, and the next week is week 1. Both January 4th and the
97 first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]
99 %w Replaced by the weekday as a decimal number [0,6], with 0 representing Sunday. [ tm_wday]
101 %W Replaced by the week number of the year as a decimal number [00,53]. The first Monday of January is the
102 first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
104 %x Replaced by the locale's appropriate date representation. (See the Base Definitions volume of
105 IEEE Std 1003.1-2001, <time.h>.)
107 %X Replaced by the locale's appropriate time representation. (See the Base Definitions volume of
108 IEEE Std 1003.1-2001, <time.h>.)
110 %y Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year]
112 %Y Replaced by the year as a decimal number (for example, 1997). [ tm_year]
114 %z Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ), or by no charac-
115 ters if no timezone is determinable. For example, "-0430" means 4 hours 30 minutes behind UTC (west of
116 Greenwich). If tm_isdst is zero, the standard time offset is used. If tm_isdst is greater than zero, the
117 daylight savings time offset is used. If tm_isdst is negative, no characters are returned. [ tm_isdst]
119 %Z Replaced by the timezone name or abbreviation, or by no bytes if no timezone information exists. [
125 Para obtener más informacion sobre la espeficacion de formato \em man \em strftime (p.e.).
127 Para poder obtener la parte fraccionaria en la salida del metodo #getCStringValue hay que indicar el literal \em %%d. Por ejemplo:
130 TimeStamp oneTime (false, "%T.%%d")
133 explicit TimeStamp(const bool isNulleable = false, const char* format = NULL) :
134 Date(Data::Type::TimeStamp, isNulleable, format),
135 a_fractionalSecond(0)
139 * Devuelve la parte fraccionaria de los segundos asociados a este objeto.
140 * \return La parte fraccionaria de los segundos asociados a este objeto.
142 int getFractionalSecond() const { return a_fractionalSecond; }
145 * Establece la parte fraccionaria de los segundos de este objeto.
146 * \param fsec Parte fraccionaria de los segundos.
148 void setFractionalSecond(const int fsec) { a_fractionalSecond = fsec; }
151 * Interpreta el contenido de la fecha y lo transfiere al buffer.
152 * \return El buffer que contiene esta fecha interpretada con el formato indicado en el contructor.
153 * \warning El resultado sera NULL en caso de no poder interpretar correctamente la fecha.
155 virtual const char* getCStringValue() const ;
159 \param timeStamp Fecha de la que copiar.
160 \return La instancia de esta fecha.
161 \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
163 TimeStamp& operator = (const TimeStamp& timeStamp) noexcept(false) {
164 Date::operator= (timeStamp);
165 a_fractionalSecond = timeStamp.a_fractionalSecond;
171 \param date Fecha de la que copiar.
172 \return La instancia de esta fecha.
173 \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
175 TimeStamp& operator = (const Date& date) noexcept(false) { Date::operator= (date); a_fractionalSecond = 0; return *this; }
178 char a_anotherBuffer [MaxDateSize + 1];
179 int a_fractionalSecond;
181 void do_clear() { a_fractionalSecond = 0; a_anotherBuffer [0] = 0; }