All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
DateTime.h
/* -*- mode: c++; indent-tabs-mode: nil -*- */
/*
DateTime.h
Qore programming language
Copyright 2003 - 2013 David Nichols
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef QORE_DATETIME_H
#define QORE_DATETIME_H
#include <time.h>
class AbstractQoreZoneInfo;
struct qore_tm {
int year, month, day, hour, minute, second, us, utc_secs_east;
bool dst;
const char *zone_name;
const AbstractQoreZoneInfo *zone;
DLLLOCAL void clear() {
year = 0;
month = 0;
day = 0;
hour = 0;
minute = 0;
second = 0;
us = 0;
utc_secs_east = 0;
dst = false;
zone_name = 0;
zone = 0;
}
DLLLOCAL bool isTimeNull() const {
return !hour && !minute && !second && !us;
}
DLLEXPORT int secsEast() const;
DLLEXPORT const char *regionName() const;
};
class DateTime {
friend class DateTimeNode;
protected:
class qore_date_private *priv;
DLLLOCAL void setDateLiteral(int64 date);
DLLLOCAL void setRelativeDateLiteral(int64 date);
DLLLOCAL DateTime& operator=(const DateTime&);
DLLLOCAL DateTime(qore_date_private *n_priv);
public:
DLLEXPORT DateTime(bool r = false);
DLLEXPORT DateTime(int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, short n_ms = 0, bool n_relative = false);
DLLEXPORT DateTime(int64 seconds);
DLLEXPORT DateTime(int64 seconds, int ms);
DLLEXPORT DateTime(const char *date);
DLLEXPORT DateTime(const AbstractQoreZoneInfo *zone, const char *date);
DLLEXPORT DateTime(const struct tm *tms);
DLLEXPORT DateTime(const DateTime &dt);
DLLEXPORT ~DateTime();
DLLEXPORT void getTM(struct tm *tms) const;
DLLEXPORT void setNow();
DLLEXPORT void setNow(const AbstractQoreZoneInfo *zone);
DLLEXPORT void setDate(int64 seconds);
DLLEXPORT void setDate(int64 seconds, int ms);
DLLEXPORT void setDate(const AbstractQoreZoneInfo *zone, int64 seconds, int us);
DLLEXPORT void setLocalDate(const AbstractQoreZoneInfo *zone, int64 seconds, int us);
DLLEXPORT void setDate(const AbstractQoreZoneInfo *n_zone, int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
DLLEXPORT void setDate(const char *str);
DLLEXPORT void setDate(const AbstractQoreZoneInfo *zone, const char *str);
DLLEXPORT void setRelativeDate(const char *str);
DLLEXPORT void setDate(const struct tm *tms, short ms = 0);
DLLEXPORT void setDate(const DateTime &date);
DLLEXPORT void setTime(int h, int m, int s, short ms = 0);
DLLEXPORT bool checkValidity() const;
DLLEXPORT bool isEqual(const DateTime *dt) const;
DLLEXPORT DateTime *add(const DateTime *dt) const;
DLLEXPORT DateTime *subtractBy(const DateTime *dt) const;
DLLEXPORT int64 getEpochSeconds() const;
DLLEXPORT int64 getEpochSecondsUTC() const;
DLLEXPORT int64 getEpochMicrosecondsUTC() const;
DLLEXPORT int64 getEpochMillisecondsUTC() const;
DLLEXPORT int getDayNumber() const;
DLLEXPORT int getDayOfWeek() const;
DLLEXPORT void getISOWeek(int &year, int &week, int &day) const;
DLLEXPORT void format(QoreString &str, const char *fmt) const;
DLLEXPORT bool isRelative() const;
DLLEXPORT bool isAbsolute() const;
DLLEXPORT short getYear() const;
DLLEXPORT int getMonth() const;
DLLEXPORT int getDay() const;
DLLEXPORT int getHour() const;
DLLEXPORT int getMinute() const;
DLLEXPORT int getSecond() const;
DLLEXPORT int getMillisecond() const;
DLLEXPORT int getMicrosecond() const;
DLLEXPORT int64 getRelativeSeconds() const;
DLLEXPORT int64 getRelativeMilliseconds() const;
DLLEXPORT int64 getRelativeMicroseconds() const;
DLLEXPORT bool hasValue() const;
DLLEXPORT DateTime *unaryMinus() const;
DLLEXPORT void unaryMinusInPlace();
DLLEXPORT void getInfo(const AbstractQoreZoneInfo *n_zone, qore_tm &info) const;
DLLEXPORT void getInfo(qore_tm &info) const;
DLLEXPORT void setZone(const AbstractQoreZoneInfo *n_zone);
DLLEXPORT const AbstractQoreZoneInfo* getZone() const;
// static methods
DLLEXPORT static bool isLeapYear(int year);
DLLEXPORT static int getLastDayOfMonth(int month, int year);
DLLEXPORT static DateTime *getDateFromISOWeek(int year, int week, int day, ExceptionSink *xsink);
DLLEXPORT static int compareDates(const DateTime *left, const DateTime *right);
DLLEXPORT static DateTime *makeAbsolute(const AbstractQoreZoneInfo *n_zone, int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
DLLEXPORT static DateTime *makeAbsolute(const AbstractQoreZoneInfo *zone, int64 seconds, int us = 0);
DLLEXPORT static DateTime *makeAbsoluteLocal(const AbstractQoreZoneInfo *zone, int64 seconds, int us = 0);
DLLEXPORT static DateTime *makeRelative(int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
};
#endif
DateTime::DateTime
DLLLOCAL DateTime(qore_date_private *n_priv)
this constructor is not exported in the library
DateTime::unaryMinus
DLLEXPORT DateTime * unaryMinus() const
returns the negative time from the current time
DateTime::operator=
DLLLOCAL DateTime & operator=(const DateTime &)
this function is not implemented; it is here as a private function in order to prohibit it from being...
DateTime::priv
class qore_date_private * priv
private date data - most are ints so relative dates can hold a lot of data
Definition: DateTime.h:90
qore_tm::regionName
DLLEXPORT const char * regionName() const
returns the region name of the zone
DateTime::getMinute
DLLEXPORT int getMinute() const
returns the minute portion of the date-time value (in local time according to the time zone for absol...
DateTime::getRelativeMicroseconds
DLLEXPORT int64 getRelativeMicroseconds() const
returns the difference as the number of microseconds between the date/time value and the local time a...
DateTime
Holds absolute and relative date/time values in Qore with precision to the microsecond.
Definition: DateTime.h:85
DateTime::setDate
DLLEXPORT void setDate(int64 seconds)
sets the absolute date value based on the number of seconds from January 1, 1970
DateTime::setZone
DLLEXPORT void setZone(const AbstractQoreZoneInfo *n_zone)
changes the time zone for the time without updating the epoch offset
DateTime::getRelativeSeconds
DLLEXPORT int64 getRelativeSeconds() const
returns the difference as the number of seconds between the date/time value and the local time at the...
DateTime::hasValue
DLLEXPORT bool hasValue() const
returns true if the object has a value, false if not (zero value = 1970-01-01Z for absolute times...
DateTime::isLeapYear
static DLLEXPORT bool isLeapYear(int year)
returns true if the year passed is a leap year according to a proleptic gregorian calendar ...
qore_tm::secsEast
DLLEXPORT int secsEast() const
returns seconds east of UTC for zone
DateTime::getEpochMicrosecondsUTC
DLLEXPORT int64 getEpochMicrosecondsUTC() const
gets the number of microseconds since January 1, 1970Z for the current date
DateTime::getMicrosecond
DLLEXPORT int getMicrosecond() const
returns the microsecond portion of the date-time value
DateTime::getDateFromISOWeek
static DLLEXPORT DateTime * getDateFromISOWeek(int year, int week, int day, ExceptionSink *xsink)
returns a DateTime value from ISO-8601 week and day offsets
DateTime::getMonth
DLLEXPORT int getMonth() const
returns the month portion of the date-time value (in local time according to the time zone for absolu...
DateTime::~DateTime
DLLEXPORT ~DateTime()
destroys the object and frees all memory
DateTime::getMillisecond
DLLEXPORT int getMillisecond() const
returns the microsecond portion of the date-time value divided by 1000
QoreString
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:42
DateTime::getDay
DLLEXPORT int getDay() const
returns the day portion of the date-time value (in local time according to the time zone for absolute...
DateTime::getDayOfWeek
DLLEXPORT int getDayOfWeek() const
returns the day of week for the current date (0-6, Sun-Sat)
DateTime::isRelative
DLLEXPORT bool isRelative() const
returns true if the value is a relative date-time value
DateTime::setRelativeDate
DLLEXPORT void setRelativeDate(const char *str)
sets a relative date from a string in the format YYYYMMDDHHmmSS
DateTime::getEpochSeconds
DLLEXPORT int64 getEpochSeconds() const
gets the number of seconds since January 1, 1970 for the current date offset in local time ...
DateTime::getEpochMillisecondsUTC
DLLEXPORT int64 getEpochMillisecondsUTC() const
gets the number of milliseconds since January 1, 1970Z for the current date
DateTimeNode
Qore&#39;s parse tree/value type for date-time values, reference-counted, dynamically-allocated only...
Definition: DateTimeNode.h:36
DateTime::getLastDayOfMonth
static DLLEXPORT int getLastDayOfMonth(int month, int year)
returns the number of days in the month given according to a proleptic gregorian calendar ...
DateTime::getSecond
DLLEXPORT int getSecond() const
returns the second portion of the date-time value (in local time according to the time zone for absol...
DateTime::compareDates
static DLLEXPORT int compareDates(const DateTime *left, const DateTime *right)
returns -1, 0, or 1 if the left date is less than, equal, or greater than the right date ...
DateTime::getEpochSecondsUTC
DLLEXPORT int64 getEpochSecondsUTC() const
gets the number of seconds since January 1, 1970Z for the current date
DateTime::makeAbsolute
static DLLEXPORT DateTime * makeAbsolute(const AbstractQoreZoneInfo *n_zone, int n_year, int n_month, int n_day, int n_hour=0, int n_minute=0, int n_second=0, int n_us=0)
static &quot;constructor&quot; to create an absolute time, including microseconds
DateTime::getRelativeMilliseconds
DLLEXPORT int64 getRelativeMilliseconds() const
returns the difference as the number of milliseconds between the date/time value and the local time a...
DateTime::getInfo
DLLEXPORT void getInfo(const AbstractQoreZoneInfo *n_zone, qore_tm &info) const
returns the broken-down time in the given time zone (n_zone = 0 means UTC)
DateTime::getZone
DLLEXPORT const AbstractQoreZoneInfo * getZone() const
gets the time zone for the object; returns 0 for relative date/time values
DateTime::getTM
DLLEXPORT void getTM(struct tm *tms) const
sets a &quot;struct tm&quot; from the current date/time value for the time zone for the object; use DateTime::g...
DateTime::getYear
DLLEXPORT short getYear() const
returns the year portion of the date-time value (in local time according to the time zone for absolut...
ExceptionSink
container for holding Qore-language exception information and also for registering a &quot;thread_exit&quot; ca...
Definition: ExceptionSink.h:35
DateTime::getISOWeek
DLLEXPORT void getISOWeek(int &year, int &week, int &day) const
returns the ISO-8601 week information
DateTime::isAbsolute
DLLEXPORT bool isAbsolute() const
returns true if the value is an absolute date-time value
DateTime::getHour
DLLEXPORT int getHour() const
returns the hour portion of the date-time value (in local time according to the time zone for absolut...
DateTime::format
DLLEXPORT void format(QoreString &str, const char *fmt) const
formats the date/time value to a QoreString
DateTime::unaryMinusInPlace
DLLEXPORT void unaryMinusInPlace()
converts the current value to the negative of itself
DateTime::setNow
DLLEXPORT void setNow()
sets the current date and time in the current time zone; current contents are overwritten ...
DateTime::makeAbsoluteLocal
static DLLEXPORT DateTime * makeAbsoluteLocal(const AbstractQoreZoneInfo *zone, int64 seconds, int us=0)
static &quot;constructor&quot; to create an absolute time as an offset from the given time zone&#39;s epoch...
DateTime::setLocalDate
DLLEXPORT void setLocalDate(const AbstractQoreZoneInfo *zone, int64 seconds, int us)
sets the absolute date value based on the number of seconds from January 1, 1970 in the given time zo...
DateTime::getDayNumber
DLLEXPORT int getDayNumber() const
returns the ordinal number of the day in the year for absolute dates, sometimes (mistakenly) referred...
DateTime::setTime
DLLEXPORT void setTime(int h, int m, int s, short ms=0)
sets the time from hours, minutes, seconds, and milliseconds
qore_tm
for returning broken-down time information
Definition: DateTime.h:33
DateTime::makeRelative
static DLLEXPORT DateTime * makeRelative(int n_year, int n_month, int n_day, int n_hour=0, int n_minute=0, int n_second=0, int n_us=0)
static &quot;constructor&quot; to create a relative time, including microseconds