-
Notifications
You must be signed in to change notification settings - Fork 1
/
MTime.cpp
151 lines (123 loc) · 3.97 KB
/
MTime.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// File : MTime.h
// Author : Neil Massey
// Date : 01/12/08
// Purpose : Class to store time details in
#include "MTime.h"
#include "ToString.h"
#include <iostream>
#include <string.h>
MTime::MTime(int* px_date, int time_type)
{
memcpy(px_time_array, px_date, 6 * sizeof(int));
i_time_type = time_type;
}
//*****************************************************************************
bool MTime::operator == (const MTime& rhs) const
{
bool b_equal = true;
for (int i=0; i<6; i++)
b_equal &= px_time_array[i] == rhs.px_time_array[i];
return b_equal;
}
//*****************************************************************************
bool MTime::operator != (const MTime& rhs) const
{
return !(*this == rhs);
}
//*****************************************************************************
bool MTime::operator > (const MTime& rhs) const
{
return CalcHours() > rhs.CalcHours();
}
//*****************************************************************************
bool MTime::operator < (const MTime& rhs) const
{
return CalcHours() < rhs.CalcHours();
}
//*****************************************************************************
bool MTime::operator >= (const MTime& rhs) const
{
return CalcHours() >= rhs.CalcHours();
}
//*****************************************************************************
bool MTime::operator <= (const MTime& rhs) const
{
return CalcHours() <= rhs.CalcHours();
}
//*****************************************************************************
void MTime::operator = (const MTime& rhs)
{
// copy constructor: needed to copy time details over, not just
// the pointer location
memcpy(px_time_array, rhs.px_time_array, 6 * sizeof(int));
i_time_type = rhs.i_time_type;
}
//*****************************************************************************
void MTime::Print(void) const
{
for (int i=0; i<6; ++i)
std::cout << px_time_array[i] << " ";
std::cout << std::endl;
}
//*****************************************************************************
double MTime::CalcDays(void) const
{
int i_days_elapsed[13] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
// 31 28 31 30 31 30 31 31 30 31 30 31
// J F M A M J J A S O N D
// get the number of days from the calendar type
float f_days_per_year = 0.0;
switch ((i_time_type % 100) % 10)
{
case 1:
f_days_per_year = 365.25;
break;
default:
f_days_per_year = 360.0;
}
// get the time details from the array
int i_years = px_time_array[0];
int i_months = px_time_array[1];
int i_days = px_time_array[2];
int i_hours = px_time_array[3];
int i_mins = px_time_array[4];
// get number of days upto this year
float c_time = float(int((i_years-1) * f_days_per_year));
// add the month days
if (f_days_per_year == 365.25)
{
c_time += i_days_elapsed[i_months-1];
// check for leap year
if ((i_years % 4 == 0) && (i_months == 2))
c_time += 1.0;
}
else
c_time += (i_months-1) * f_days_per_year/12;
// add the days, hours, minutes and seconds
c_time += (i_days-1);
c_time += float(i_hours) / 24.0;
c_time += float(i_mins) / (24.0 * 60.0);
return c_time;
}
//*****************************************************************************
double MTime::CalcHours(void) const
{
// calculate the number of hours since year 0 represented by the MTime
return CalcDays() * 24.0;
}
//*****************************************************************************
const int* MTime::GetTimeArray(void) const
{
return px_time_array;
}
//*****************************************************************************
std::string MTime::GetFormatted(void) const
{
std::string s_tf = ToString(px_time_array[0]) + "-" +
ToString(px_time_array[1],2,'0') + "-" +
ToString(px_time_array[2],2,'0') + " " +
ToString(px_time_array[3],2,'0') + ":" +
ToString(px_time_array[4],2,'0') + ":" +
ToString(px_time_array[5],2,'0');
return s_tf;
}