Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <string>
- #include <ctime>
- using namespace std;
- /// \brief Trida reprezentujici datum
- class DateTime final
- {
- public:
- size_t Day, Month, Year;
- DateTime()
- {
- Day = Month = Year = 0;
- }
- DateTime(size_t day, size_t month, size_t year)
- {
- Day = day;
- Month = month;
- Year = year;
- }
- /// \brief Vytvori instanci ze stringu
- /// \param s Datum ve formatu dd.MM.yyyy
- DateTime(string s)
- {
- sscanf(s.c_str(), "%u.%u.%u", &Day, &Month, &Year);
- }
- /// \brief Metoda, ktera prida dalsi den k aktualni instanci
- void NextDay()
- {
- size_t days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- if(++Day > days[Month])
- {
- Day = 1;
- if(++Month > 12)
- {
- Month = 1;
- Year++;
- }
- }
- }
- /// \brief Staticka metoda, ktera vrati instanci na dnesni den podle lokalniho casu
- static DateTime Today()
- {
- time_t t = time(NULL);
- struct tm *aTime = localtime(&t);
- return DateTime(aTime->tm_mday, aTime->tm_mon + 1, aTime->tm_year + 1900);
- }
- bool operator ==(const DateTime& dt) const
- {
- return Day == dt.Day && Month == dt.Month && Year == dt.Year;
- }
- bool operator >(const DateTime& dt) const
- {
- return Year > dt.Year ||
- (Year == dt.Year && Month > dt.Month)||
- (Year == dt.Year && Month == dt.Month && Day > dt.Day);
- }
- bool operator <(const DateTime& dt) const
- {
- return Year < dt.Year ||
- (Year == dt.Year && Month < dt.Month)||
- (Year == dt.Year && Month == dt.Month && Day < dt.Day);
- }
- };
- /// \brief Vypise na ostream datum ve formatu dd.MM.yyyy
- inline ostream& operator << (std::ostream& os, const DateTime& dt)
- {
- return os << dt.Day << "." << dt.Month << "." << dt.Year;
- }
- namespace std
- {
- /// \brief hash metoda pro DateTime tridu
- template <>
- struct hash<DateTime>
- {
- std::size_t operator()(const DateTime& dt) const
- {
- return (dt.Day ^ dt.Month * dt.Year);
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement