1 // ANNA - Anna is Not Nothingness Anymore
3 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
5 // http://redmine.teslayout.com/projects/anna-suite
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
17 // * Neither the name of the copyright holder nor the names of its
18 // contributors may be used to endorse or promote products derived from
19 // this software without specific prior written permission.
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 // Authors: eduardo.ramos.testillano@gmail.com
34 // cisco.tierra@gmail.com
37 #ifndef anna_dbms_TimeStamp_hpp
38 #define anna_dbms_TimeStamp_hpp
40 #include <anna/dbms/Date.hpp>
47 Tipo de datos que permite trabajar con el tipo de dato 'TimeStamp' de un gestor de base de
50 El tipo de dato TimeStamp contiene la información suficiente para representar una fecha
51 incluyendo la hora del día.
53 class TimeStamp : public Date {
57 \param isNulleable Indica si el dato puede tomar valores nulos.
58 \param format Formato usado para interpretar los datos de esta fecha, en los metodos Date::getCStringValue y
59 Date::setValue (const char*) y Date::setValue (const std::string&). Sigue la especificacion:
62 %a Replaced by the localeâs abbreviated weekday name. [ tm_wday]
64 %A Replaced by the localeâs full weekday name. [ tm_wday]
66 %b Replaced by the localeâs abbreviated month name. [ tm_mon]
68 %B Replaced by the localeâs full month name. [ tm_mon]
70 %c Replaced by the locale's appropriate date and time representation. (See the Base Definitions volume of
71 IEEE Std 1003.1-2001, <time.h>.)
73 %C Replaced by the year divided by 100 and truncated to an integer, as a decimal number [00,99]. [ tm_year]
75 %d Replaced by the day of the month as a decimal number [01,31]. [ tm_mday]
77 %D Equivalent to %m / %d / %y . [ tm_mon, tm_mday, tm_year]
79 %e Replaced by the day of the month as a decimal number [1,31]; a single digit is preceded by a space. [
82 %F Equivalent to %Y - %m - %d (the ISO 8601:2000 standard date format). [ tm_year, tm_mon, tm_mday]
84 %g Replaced by the last 2 digits of the week-based year (see below) as a decimal number [00,99]. [ tm_year,
87 %G Replaced by the week-based year (see below) as a decimal number (for example, 1977). [ tm_year, tm_wday,
90 %h Equivalent to %b . [ tm_mon]
92 %H Replaced by the hour (24-hour clock) as a decimal number [00,23]. [ tm_hour]
94 %I Replaced by the hour (12-hour clock) as a decimal number [01,12]. [ tm_hour]
96 %j Replaced by the day of the year as a decimal number [001,366]. [ tm_yday]
98 %m Replaced by the month as a decimal number [01,12]. [ tm_mon]
100 %M Replaced by the minute as a decimal number [00,59]. [ tm_min]
102 %n Replaced by a <newline>.
104 %p Replaced by the locale's equivalent of either a.m. or p.m. [ tm_hour]
106 %r Replaced by the time in a.m. and p.m. notation; in the POSIX locale this shall be equivalent to %I : %M
107 : %S %p . [ tm_hour, tm_min, tm_sec]
109 %R Replaced by the time in 24-hour notation ( %H : %M ). [ tm_hour, tm_min]
111 %S Replaced by the second as a decimal number [00,60]. [ tm_sec]
113 %t Replaced by a <tab>.
115 %T Replaced by the time ( %H : %M : %S ). [ tm_hour, tm_min, tm_sec]
117 %u Replaced by the weekday as a decimal number [1,7], with 1 representing Monday. [ tm_wday]
119 %U Replaced by the week number of the year as a decimal number [00,53]. The first Sunday of January is the
120 first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
122 %V Replaced by the week number of the year (Monday as the first day of the week) as a decimal number [01,53].
123 If the week containing 1 January has four or more days in the new year, then it is considered week 1. Oth-
124 erwise, it is the last week of the previous year, and the next week is week 1. Both January 4th and the
125 first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]
127 %w Replaced by the weekday as a decimal number [0,6], with 0 representing Sunday. [ tm_wday]
129 %W Replaced by the week number of the year as a decimal number [00,53]. The first Monday of January is the
130 first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
132 %x Replaced by the locale's appropriate date representation. (See the Base Definitions volume of
133 IEEE Std 1003.1-2001, <time.h>.)
135 %X Replaced by the locale's appropriate time representation. (See the Base Definitions volume of
136 IEEE Std 1003.1-2001, <time.h>.)
138 %y Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year]
140 %Y Replaced by the year as a decimal number (for example, 1997). [ tm_year]
142 %z Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ), or by no charac-
143 ters if no timezone is determinable. For example, "-0430" means 4 hours 30 minutes behind UTC (west of
144 Greenwich). If tm_isdst is zero, the standard time offset is used. If tm_isdst is greater than zero, the
145 daylight savings time offset is used. If tm_isdst is negative, no characters are returned. [ tm_isdst]
147 %Z Replaced by the timezone name or abbreviation, or by no bytes if no timezone information exists. [
153 Para obtener más informacion sobre la espeficacion de formato \em man \em strftime (p.e.).
155 Para poder obtener la parte fraccionaria en la salida del metodo #getCStringValue hay que indicar el literal \em %%d. Por ejemplo:
158 TimeStamp oneTime (false, "%T.%%d")
161 explicit TimeStamp(const bool isNulleable = false, const char* format = NULL) :
162 Date(Data::Type::TimeStamp, isNulleable, format),
163 a_fractionalSecond(0)
167 * Devuelve la parte fraccionaria de los segundos asociados a este objeto.
168 * \return La parte fraccionaria de los segundos asociados a este objeto.
170 int getFractionalSecond() const throw() { return a_fractionalSecond; }
173 * Establece la parte fraccionaria de los segundos de este objeto.
174 * \param fsec Parte fraccionaria de los segundos.
176 void setFractionalSecond(const int fsec) throw() { a_fractionalSecond = fsec; }
179 * Interpreta el contenido de la fecha y lo transfiere al buffer.
180 * \return El buffer que contiene esta fecha interpretada con el formato indicado en el contructor.
181 * \warning El resultado sera NULL en caso de no poder interpretar correctamente la fecha.
183 virtual const char* getCStringValue() const throw();
187 \param timeStamp Fecha de la que copiar.
188 \return La instancia de esta fecha.
189 \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
191 TimeStamp& operator = (const TimeStamp& timeStamp) throw(RuntimeException) {
192 Date::operator= (timeStamp);
193 a_fractionalSecond = timeStamp.a_fractionalSecond;
199 \param date Fecha de la que copiar.
200 \return La instancia de esta fecha.
201 \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
203 TimeStamp& operator = (const Date& date) throw(RuntimeException) { Date::operator= (date); a_fractionalSecond = 0; return *this; }
206 char a_anotherBuffer [MaxDateSize + 1];
207 int a_fractionalSecond;
209 void do_clear() throw() { a_fractionalSecond = 0; a_anotherBuffer [0] = 0; }