/* This file is part of MAUS: http://micewww.pp.rl.ac.uk/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . */ #ifndef _SRC_COMMON_CPP_DATASTRUCTURE_DATETIME_ #define _SRC_COMMON_CPP_DATASTRUCTURE_DATETIME_ #include #include "src/common_cpp/Utils/VersionNumber.hh" namespace MAUS { /** @class DateTime holds time stamp information * * Timestamps are stored in a string formatted like * * YYYY-MM-DDTHH:MM:SS.mmmmmm * * and DateTime checks this formatting at runtime. T is a user-defined * separator character. (Chosen to match python datetime library). */ class DateTime { public: /** Default constructor - initialises to 0/NULL */ DateTime(); /** Copy constructor - any pointers are deep copied */ DateTime(const DateTime& date_time); /** Equality operator - any pointers are deep copied */ DateTime& operator=(const DateTime& date_time); /** Destructor - any member pointers are deleted */ virtual ~DateTime(); /** Get the string formatted date time */ std::string GetDateTime() const; /** Set the string formatted date time * * \param datetime time stamp stored in a string formatted like\n * YYYY-MM-DDTHH:MM:SS.mmmmmm\n * where T is a user defined separator. * * Throws a Exception if formatting is not correct */ void SetDateTime(std::string datetime); /** Return true if the datetime stamp is correctly formatted * * Returns true if format is like\n * YYYY-MM-DDTHH:MM:SS.mmmmmm\n * where T is any character. Checks months, days, etc; does not check * leapyears and leapseconds - so allow 61 seconds in a minute and 29 days * in February. */ static bool CheckFormat(std::string datetime); private: std::string _date_time; // dupe of code in STLUtils static int ToInt(std::string int_as_string); static bool Check(std::string number, int minimum, int maximum_plus_one); static bool CheckDay(std::string day, std::string month); static bool CheckSeparators(std::string datetime); MAUS_VERSIONED_CLASS_DEF(DateTime) }; } #endif // _SRC_COMMON_CPP_DATASTRUCTURE_DATETIME_