135 lines
4.0 KiB
C++
135 lines
4.0 KiB
C++
|
/*
|
||
|
* Portable Agile C++ Classes (PACC)
|
||
|
* Copyright (C) 2004 by Marc Parizeau
|
||
|
* http://manitou.gel.ulaval.ca/~parizeau/PACC
|
||
|
*
|
||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
*
|
||
|
* Contact:
|
||
|
* Laboratoire de Vision et Systemes Numeriques
|
||
|
* Departement de genie electrique et de genie informatique
|
||
|
* Universite Laval, Quebec, Canada, G1K 7P4
|
||
|
* http://vision.gel.ulaval.ca
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*!
|
||
|
* \file PACC/Util/Date.hpp
|
||
|
* \brief Class definition for the portable time and date.
|
||
|
* \author Marc Parizeau, Laboratoire de vision et systèmes numériques, Université Laval
|
||
|
* $Revision: 1.5.2.1 $
|
||
|
* $Date: 2007/09/10 18:24:10 $
|
||
|
*/
|
||
|
|
||
|
#ifndef PACC_Date_hpp
|
||
|
#define PACC_Date_hpp
|
||
|
|
||
|
#include <string>
|
||
|
#include <ctime>
|
||
|
|
||
|
namespace PACC
|
||
|
{
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
/*! \brief Portable time and date class.
|
||
|
\author Marc Parizeau, Laboratoire de vision et systèmes numériques, Université Laval
|
||
|
\ingroup Util
|
||
|
*/
|
||
|
class Date
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
//! Construct using current system date and time.
|
||
|
Date(void) : mTime(::time(0))
|
||
|
{}
|
||
|
|
||
|
//! Construct from \c inSeconds seconds since January 1st, 1970.
|
||
|
explicit Date(unsigned int inSeconds) : mTime(inSeconds)
|
||
|
{}
|
||
|
|
||
|
// Construct with specified date.
|
||
|
Date(unsigned int inYear, unsigned int inMonth, unsigned int inDay);
|
||
|
|
||
|
|
||
|
//! Return number of seconds between this date and date \c inDate.
|
||
|
unsigned int operator-(const Date& inDate) const
|
||
|
{
|
||
|
return mTime-inDate.mTime;
|
||
|
}
|
||
|
|
||
|
//! Return this date less \c inSeconds seconds.
|
||
|
Date operator-(unsigned int inSeconds) const
|
||
|
{
|
||
|
Date lDate(mTime);
|
||
|
return lDate -= inSeconds;
|
||
|
}
|
||
|
|
||
|
//! Remove \c inSeconds seconds from this date.
|
||
|
Date& operator-=(unsigned int inSeconds)
|
||
|
{
|
||
|
mTime -= inSeconds;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
//! Return this date plus \c inSeconds seconds.
|
||
|
Date operator+(unsigned int inSeconds) const
|
||
|
{
|
||
|
Date lDate(mTime);
|
||
|
return lDate += inSeconds;
|
||
|
}
|
||
|
|
||
|
//! Add \c inSeconds seconds to this date.
|
||
|
Date& operator+=(unsigned int inSeconds)
|
||
|
{
|
||
|
mTime += inSeconds;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
// Return formatted date and time using the std::strftime string format \c inFormat.
|
||
|
string get(const string& inFormat = "%a %b %d %T %Z %Y") const;
|
||
|
// Return day of month for this date (1-31).
|
||
|
unsigned int getDayOfMonth(void) const;
|
||
|
// Return day of week for this date (sunday=0-6).
|
||
|
unsigned int getDayOfWeek(void) const;
|
||
|
// Return day of year for this date (1-365).
|
||
|
unsigned int getDayOfYear(void) const;
|
||
|
// Return hour of day for this date (0-23).
|
||
|
unsigned int getHourOfDay(void) const;
|
||
|
// Return minutes of hour for this date (0-59).
|
||
|
unsigned int getMinutesOfHour(void) const;
|
||
|
// Return seconds of minutes for this date (0-59).
|
||
|
double getSecondsOfMinute(void) const;
|
||
|
// Return month of year for this date (1-12).
|
||
|
unsigned int getMonthOfYear(void) const;
|
||
|
// Return this date expressed in seconds since January 1st, 1970.
|
||
|
unsigned int getTimeInSeconds(void) const;
|
||
|
// Return year of this date.
|
||
|
unsigned int getYear(void) const;
|
||
|
// Set date to year \c inyear, month \c inMonth, and day \c inDay (time is unchanged).
|
||
|
void setDate(unsigned int inYear, unsigned int inMonth, unsigned int inDay);
|
||
|
// Set time to \c inHour hour, \c inMinutes minutes, and \c inSeconds seconds (date is unchanged).
|
||
|
void setTime(unsigned int inHour, unsigned int inMinutes, unsigned int inSeconds);
|
||
|
|
||
|
protected:
|
||
|
|
||
|
time_t mTime; //!< Number of seconds since Jan 1st, 1970.
|
||
|
|
||
|
};
|
||
|
|
||
|
} // end of PACC namespace
|
||
|
|
||
|
#endif // PACC_Date_hpp
|