Advertisement
Guest User

Untitled

a guest
Dec 20th, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. /// \brief Trida reprezentujici datum
  9. class DateTime final
  10. {
  11. public:
  12.     size_t Day, Month, Year;
  13.  
  14.     DateTime()
  15.     {
  16.         Day = Month = Year = 0;
  17.     }
  18.  
  19.     DateTime(size_t day, size_t month, size_t year)
  20.     {
  21.         Day = day;
  22.         Month = month;
  23.         Year = year;
  24.     }
  25.  
  26.     /// \brief Vytvori instanci ze stringu
  27.     /// \param  s Datum ve formatu dd.MM.yyyy
  28.     DateTime(string s)
  29.     {
  30.         sscanf(s.c_str(), "%u.%u.%u", &Day, &Month, &Year);
  31.     }
  32.  
  33.     /// \brief Metoda, ktera prida dalsi den k aktualni instanci
  34.     void NextDay()
  35.     {
  36.         size_t days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  37.         if(++Day > days[Month])
  38.         {
  39.             Day = 1;
  40.             if(++Month > 12)
  41.             {
  42.                 Month = 1;
  43.                 Year++;
  44.             }
  45.         }
  46.     }
  47.  
  48.     /// \brief Staticka metoda, ktera vrati instanci na dnesni den podle lokalniho casu
  49.     static DateTime Today()
  50.     {
  51.         time_t t = time(NULL);
  52.         struct tm *aTime = localtime(&t);
  53.  
  54.         return DateTime(aTime->tm_mday, aTime->tm_mon + 1, aTime->tm_year + 1900);
  55.     }
  56.  
  57.     bool operator ==(const DateTime& dt) const
  58.     {
  59.         return Day == dt.Day && Month == dt.Month && Year == dt.Year;
  60.     }
  61.  
  62.     bool operator >(const DateTime& dt) const
  63.     {
  64.         return Year > dt.Year ||
  65.                (Year == dt.Year && Month > dt.Month)||
  66.                (Year == dt.Year && Month == dt.Month && Day > dt.Day);
  67.     }
  68.  
  69.     bool operator <(const DateTime& dt) const
  70.     {
  71.         return Year < dt.Year ||
  72.                (Year == dt.Year && Month < dt.Month)||
  73.                (Year == dt.Year && Month == dt.Month && Day < dt.Day);
  74.     }
  75. };
  76. /// \brief Vypise na ostream datum ve formatu dd.MM.yyyy
  77. inline ostream& operator << (std::ostream& os, const DateTime& dt)
  78. {
  79.     return  os << dt.Day << "." << dt.Month << "." << dt.Year;
  80. }
  81.  
  82. namespace std
  83. {
  84. /// \brief hash metoda pro DateTime tridu
  85. template <>
  86. struct hash<DateTime>
  87. {
  88.     std::size_t operator()(const DateTime& dt) const
  89.     {
  90.         return (dt.Day ^ dt.Month * dt.Year);
  91.     }
  92. };
  93.  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement