Revert "Remove mysql and oracle resources for anna-ericsson project"
[anna.git] / include / anna / dbms / TimeStamp.hpp
diff --git a/include/anna/dbms/TimeStamp.hpp b/include/anna/dbms/TimeStamp.hpp
new file mode 100644 (file)
index 0000000..9f53aea
--- /dev/null
@@ -0,0 +1,188 @@
+// ANNA - Anna is Not Nothingness Anymore                                                         //
+//                                                                                                //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
+//                                                                                                //
+// See project site at http://redmine.teslayout.com/projects/anna-suite                           //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+#ifndef anna_dbms_TimeStamp_hpp
+#define anna_dbms_TimeStamp_hpp
+
+#include <anna/dbms/Date.hpp>
+
+namespace anna {
+
+namespace dbms {
+
+/**
+   Tipo de datos que permite trabajar con el tipo de dato 'TimeStamp' de un gestor de base de
+   datos generico.
+
+   El tipo de dato TimeStamp contiene la información suficiente para representar una fecha
+   incluyendo la hora del día.
+*/
+class TimeStamp : public Date {
+public:
+  /**
+     Constructor.
+     \param isNulleable Indica si el dato puede tomar valores nulos.
+     \param format Formato usado para interpretar los datos de esta fecha, en los metodos Date::getCStringValue y
+     Date::setValue (const char*) y Date::setValue (const std::string&). Sigue la especificacion:
+
+     \code
+      %a     Replaced by the localeâs abbreviated weekday name. [ tm_wday]
+
+      %A     Replaced by the localeâs full weekday name. [ tm_wday]
+
+      %b     Replaced by the localeâs abbreviated month name. [ tm_mon]
+
+      %B     Replaced by the localeâs full month name. [ tm_mon]
+
+      %c     Replaced  by  the  locale's  appropriate date and time representation.  (See the Base Definitions volume of
+             IEEE Std 1003.1-2001, <time.h>.)
+
+      %C     Replaced by the year divided by 100 and truncated to an integer, as a decimal number [00,99]. [ tm_year]
+
+      %d     Replaced by the day of the month as a decimal number [01,31]. [ tm_mday]
+
+      %D     Equivalent to %m / %d / %y . [ tm_mon, tm_mday, tm_year]
+
+      %e     Replaced by the day of the month as a decimal number [1,31]; a single digit  is  preceded  by  a  space.  [
+             tm_mday]
+
+      %F     Equivalent to %Y - %m - %d (the ISO 8601:2000 standard date format). [ tm_year, tm_mon, tm_mday]
+
+      %g     Replaced  by  the  last 2 digits of the week-based year (see below) as a decimal number [00,99]. [ tm_year,
+             tm_wday, tm_yday]
+
+      %G     Replaced by the week-based year (see below) as a decimal number (for example, 1977).  [  tm_year,  tm_wday,
+             tm_yday]
+
+      %h     Equivalent to %b . [ tm_mon]
+
+      %H     Replaced by the hour (24-hour clock) as a decimal number [00,23].  [ tm_hour]
+
+      %I     Replaced by the hour (12-hour clock) as a decimal number [01,12].  [ tm_hour]
+
+      %j     Replaced by the day of the year as a decimal number [001,366]. [ tm_yday]
+
+      %m     Replaced by the month as a decimal number [01,12]. [ tm_mon]
+
+      %M     Replaced by the minute as a decimal number [00,59]. [ tm_min]
+
+      %n     Replaced by a <newline>.
+
+      %p     Replaced by the locale's equivalent of either a.m. or p.m. [ tm_hour]
+
+      %r     Replaced  by the time in a.m. and p.m. notation;    in the POSIX locale this shall be equivalent to %I : %M
+             : %S %p .  [ tm_hour, tm_min, tm_sec]
+
+      %R     Replaced by the time in 24-hour notation ( %H : %M ).  [ tm_hour, tm_min]
+
+      %S     Replaced by the second as a decimal number [00,60]. [ tm_sec]
+
+      %t     Replaced by a <tab>.
+
+      %T     Replaced by the time ( %H : %M : %S ). [ tm_hour, tm_min, tm_sec]
+
+      %u     Replaced by the weekday as a decimal number [1,7], with 1 representing Monday. [ tm_wday]
+
+      %U     Replaced by the week number of the year as a decimal number [00,53].  The first Sunday of  January  is  the
+             first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
+
+      %V     Replaced  by the week number of the year (Monday as the first day of the week) as a decimal number [01,53].
+             If the week containing 1 January has four or more days in the new year, then it is considered week 1.  Oth-
+             erwise,  it  is  the  last week of the previous year, and the next week is week 1. Both January 4th and the
+             first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]
+
+      %w     Replaced by the weekday as a decimal number [0,6], with 0 representing Sunday. [ tm_wday]
+
+      %W     Replaced by the week number of the year as a decimal number [00,53].  The first Monday of  January  is  the
+             first day of week 1; days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
+
+      %x     Replaced   by   the  locale's  appropriate  date  representation.  (See  the  Base  Definitions  volume  of
+             IEEE Std 1003.1-2001, <time.h>.)
+
+      %X     Replaced  by  the  locale's  appropriate  time  representation.  (See  the  Base  Definitions   volume   of
+             IEEE Std 1003.1-2001, <time.h>.)
+
+      %y     Replaced by the last two digits of the year as a decimal number [00,99].  [ tm_year]
+
+      %Y     Replaced by the year as a decimal number (for example, 1997). [ tm_year]
+
+      %z     Replaced  by  the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ), or by no charac-
+             ters if no timezone is determinable. For example, "-0430" means 4 hours 30  minutes  behind  UTC  (west  of
+             Greenwich).    If tm_isdst is zero, the standard time offset is used. If tm_isdst is greater than zero, the
+             daylight savings time offset is used. If tm_isdst is negative, no characters are returned.  [ tm_isdst]
+
+      %Z     Replaced by the timezone name or abbreviation, or  by  no  bytes  if  no  timezone  information  exists.  [
+             tm_isdst]
+
+      %%     Replaced by % .
+     \endcode
+
+     Para obtener más informacion sobre la espeficacion de formato \em man \em strftime (p.e.).
+
+     Para poder obtener la parte fraccionaria en la salida del metodo #getCStringValue hay que indicar el literal \em %%d. Por ejemplo:
+
+     \code
+     TimeStamp oneTime (false, "%T.%%d")
+     \endcode
+   */
+  explicit TimeStamp(const bool isNulleable = false, const char* format = NULL)  :
+    Date(Data::Type::TimeStamp, isNulleable, format),
+    a_fractionalSecond(0)
+  {;}
+
+  /**
+   * Devuelve la parte fraccionaria de los segundos asociados a este objeto.
+   * \return La parte fraccionaria de los segundos asociados a este objeto.
+   */
+  int getFractionalSecond() const throw() { return a_fractionalSecond; }
+
+  /**
+   * Establece la parte fraccionaria de los segundos de este objeto.
+   * \param fsec Parte fraccionaria de los segundos.
+   */
+  void setFractionalSecond(const int fsec) throw() { a_fractionalSecond = fsec; }
+
+  /**
+   * Interpreta el contenido de la fecha y lo transfiere al buffer.
+   * \return El buffer que contiene esta fecha interpretada con el formato indicado en el contructor.
+   *  \warning El resultado sera NULL en caso de no poder interpretar correctamente la fecha.
+   */
+  virtual const char* getCStringValue() const throw();
+
+  /**
+     Operador de copia.
+     \param timeStamp Fecha de la que copiar.
+     \return La instancia de esta fecha.
+     \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
+  */
+  TimeStamp& operator = (const TimeStamp& timeStamp) throw(RuntimeException) {
+    Date::operator= (timeStamp);
+    a_fractionalSecond = timeStamp.a_fractionalSecond;
+    return *this;
+  }
+
+  /**
+     Operador de copia.
+     \param date Fecha de la que copiar.
+     \return La instancia de esta fecha.
+     \warning Solo copia el contenido de la fecha recibida, no cambia el formato de interpretacion de la fecha origen.
+  */
+  TimeStamp& operator = (const Date& date) throw(RuntimeException) { Date::operator= (date); a_fractionalSecond = 0; return *this; }
+
+private:
+  char a_anotherBuffer [MaxDateSize + 1];
+  int a_fractionalSecond;
+
+  void do_clear() throw() { a_fractionalSecond = 0; a_anotherBuffer [0] = 0; }
+};
+
+}
+}
+
+#endif
+