diff options
author | unknown <paulx161@umn.edu> | 2021-02-17 13:53:18 -0600 |
---|---|---|
committer | unknown <paulx161@umn.edu> | 2021-02-17 13:53:18 -0600 |
commit | b302ad0465573fd77fa50d5ed261289c29080b90 (patch) | |
tree | 28ef9128beff73e81a1c04d199283fb0e4ec7c8d /dev/a3-earthquake/date.cc | |
parent | Added example projects from lecture (diff) | |
download | csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.gz csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.bz2 csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.lz csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.xz csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.tar.zst csci4611-b302ad0465573fd77fa50d5ed261289c29080b90.zip |
Added Assignment 3 worksheet and code
Diffstat (limited to 'dev/a3-earthquake/date.cc')
-rw-r--r-- | dev/a3-earthquake/date.cc | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/dev/a3-earthquake/date.cc b/dev/a3-earthquake/date.cc new file mode 100644 index 0000000..620cc74 --- /dev/null +++ b/dev/a3-earthquake/date.cc @@ -0,0 +1,127 @@ +/** CSci-4611 Assignment 3: Earthquake + */ + +#include <ctime> +#include "date.h" + +using namespace std; + +const int SECONDS_PER_4_YEARS=126230400; + +Date::Date() { + year_ = 0; + month_ = 0; + day_ = 0; + hour_ = 0; + minute_ = 0; + second_ = 0; + ctime_ = 0; + fouryears_ = 0; +} + +// for visual studio, disable warning about localtime being unsafe +#pragma warning(push) +#pragma warning(disable: 4996) + +Date::Date(double seconds) { + double tweakedSeconds = seconds; + fouryears_ = 0; + while (tweakedSeconds < 0) { + tweakedSeconds += SECONDS_PER_4_YEARS; + fouryears_++; + } + ctime_ = int(tweakedSeconds); + tm *t; + t = localtime(&ctime_); + year_ = t->tm_year + 1900 - 4 * fouryears_; + month_ = t->tm_mon + 1; + day_ = t->tm_mday; + hour_ = t->tm_hour; + minute_ = t->tm_min; + second_ = t->tm_sec + (tweakedSeconds - ctime_); +} + +#pragma warning(pop) + +Date::Date(int m, int d, int y) { + month_ = m; + day_ = d; + year_ = y; + hour_ = 0; + minute_ = 0; + second_ = 0; + fouryears_ = 0; + tm t; + while (year_ + fouryears_*4 < 1970) { + fouryears_++; + } + t.tm_year = year_ - 1900 + fouryears_ * 4; + t.tm_mon = month_ - 1; + t.tm_mday = day_; + t.tm_hour = 0; + t.tm_min = 0; + t.tm_sec = 0; + ctime_ = mktime(&t); +} + +Date::Date(int m, int d, int y, int hr, int min, double sec) { + month_ = m; + day_ = d; + year_ = y; + hour_ = hr; + minute_ = min; + second_ = sec; + fouryears_ = 0; + tm t; + while (year_ + fouryears_*4 < 1970) { + fouryears_++; + } + t.tm_year = year_ - 1900 + fouryears_ * 4; + t.tm_mon = month_ - 1; + t.tm_mday = day_; + t.tm_hour = hour_; + t.tm_min = minute_; + t.tm_sec = int(second_); + ctime_ = mktime(&t); +} + +bool Date::operator<(const Date& other) { + return ToSeconds() < other.ToSeconds(); +} + +bool Date::operator>(const Date& other) { + return ToSeconds() > other.ToSeconds(); +} + +double Date::ToSeconds() const { + return ctime_ + second_ - int(second_) - double(fouryears_) * SECONDS_PER_4_YEARS; +} + +double Date::SecondsUntil(const Date& other) const { + return ToSeconds() - other.ToSeconds(); +} + + +int Date::year() { + return year_; +} + +int Date::month() { + return month_; +} + +int Date::day() { + return day_; +} + +int Date::hour() { + return hour_; +} + +int Date::minute() { + return minute_; +} + +double Date::second() { + return second_; +} |