//-------------------------------------------------------------------------------------------
// файл Time.h с определением интерфейса класса Time
//-------------------------------------------------------------------------------------------
#pragma once
#include <string>
#include <sstream>
using namespace std;
class Time
{
public:
Time();
Time(int day, int hour, int minute);
Time(int hour, int minute);
Time(int minute);
Time(const Time& tm);
int GetHour() const;
int GetMinute() const;
void SetHour(int hour);
void SetMinute(int minute);
Time& operator=(const Time& tm);
bool operator==(Time tm) const;
bool operator!=(Time tm) const;
bool operator>(Time tm) const;
bool operator<(Time tm) const;
Time& operator+=(Time tm);
friend Time operator+(Time tm1, Time tm2);
friend Time operator-(Time tm1, Time tm2);
static const int HOURS_IN_DAY = 24;
static const int MINUTES_IN_HOUR = 60;
static int GetDaysAndTime(Time& tm);
static Time GetRandomTime(Time from, Time to, int dif = 15);
wstring ToString() const;
private:
int _minute;
};
//-------------------------------------------------------------------------------------------
|
|
// файл Time.cpp с реализацией методов класса Time
//-------------------------------------------------------------------------------------------
#include "StdAfx.h"
#include "Time.h"
Time::Time(): _minute() {}
Time::Time(int minute)
{
if (minute>=0) _minute = minute;
}
Time::Time(int hour, int minute)
{
int min = 0;
if (hour>0) min+=hour*MINUTES_IN_HOUR;
if (minute>0 && minute<MINUTES_IN_HOUR) min+=minute;
_minute = min;
}
Time::Time(int day, int hour, int minute)
{
int min = 0;
if (day>0) min*=day*HOURS_IN_DAY*MINUTES_IN_HOUR;
if (hour>0) min+=hour*MINUTES_IN_HOUR;
if (minute>0 && minute<MINUTES_IN_HOUR) min+=minute;
_minute = min;
}
Time::Time(const Time& tm)
{ _minute = tm._minute;}
int Time::GetHour() const
{ return _minute/MINUTES_IN_HOUR;}
int Time::GetMinute() const
{ return _minute%MINUTES_IN_HOUR;}
void Time::SetHour(int hour)
{
int minute = _minute%MINUTES_IN_HOUR;
_minute = hour*MINUTES_IN_HOUR + minute;
}
void Time::SetMinute(int minute)
{
if (minute>=0 && minute<MINUTES_IN_HOUR)
{
int h = _minute/MINUTES_IN_HOUR;
_minute = h*MINUTES_IN_HOUR + minute;
}
}
Time& Time::operator =(const Time& tm)
{
_minute = tm._minute;
return *this;
}
bool Time::operator ==(Time tm) const
{
if (_minute == tm._minute) return true;
return false;
}
bool Time::operator!=(Time tm) const
{
if (_minute!= tm._minute) return true;
return false;
}
bool Time::operator >(Time tm) const
{
if (_minute> tm._minute) return true;
return false;
}
bool Time::operator <(Time tm) const
{
if (_minute < tm._minute) return true;
return false;
}
Time& Time::operator+= (Time tm)
{
_minute+=tm._minute;
return *this;
}
Time operator+(Time tm1, Time tm2)
{
return Time(tm1._minute+tm2._minute);
|
|
}
Time operator-(Time tm1, Time tm2)
{
if (tm1>tm2) return Time(tm1._minute - tm2._minute);
return Time();
}
int Time::GetDaysAndTime(Time &tm)
{
int days = tm._minute /
(Time::HOURS_IN_DAY*Time::MINUTES_IN_HOUR);
tm._minute = tm._minute % (Time::HOURS_IN_DAY *
Time::MINUTES_IN_HOUR);
return days;
}
Time Time::GetRandomTime(Time from, Time to, int dif)
{
if (to._minute > from._minute)
{
int razn = (to._minute - from._minute)/dif;
int Rand = from._minute + rand()%razn*dif;
return Time(Rand);
}
return from;
}
wstring Time::ToString() const
{
wostringstream os;
os<<((GetHour()<10)? "0": "")<<GetHour()<<
'-'<<((GetMinute()<10)? "0": "")<<GetMinute();
if (os) return os.str();
else return wstring();
}