#include <stdlib.h>

#include "Date.hpp"

 
Date::Date() {
  t= time( 0);  // Betriebssystem-Aufruf
}

Date::Date( time_type t) {
  this->t= t;
}

Date::~Date() { };

time_type Date::getTimeValue() const {
  return this->t;
}

void Date::add( Date& diff) {
  t += diff.t;
}

void Date::sub( Date& diff) {
  t -= diff.t;
}

Date Date::difference( Date& d2, Date& d1) {
  Date d( d2.t - d1.t);
  return d;
}

// string Date::toDateString( TimeZone& tz) {
//   time_type t= this->t;
//                               //  time zone corrections
//   t+= tz.getTimeValue();
//   
//   tm* pzeit;
//   pzeit= gmtime( &t);
// 
//   char str[80];
//   char format[]= "%Y-%m-%d";
//   strftime( str, 80, format, pzeit);
//   string s( str);
//   return s;
// }
// 
// string Date::toTimeString( TimeZone& tz) {
//   time_type t= this->t;
//   
//                             // time zone corrections 
//   t+= tz.getTimeValue();
//   
//   
//   tm* pzeit;
//   pzeit= gmtime( &t);
// 
//   char str[80];
//   char format[]= "%H:%M:%S";
//   strftime( str, 80, format, pzeit);
//   string s( str);
//   return s;
// }

string Date::toString( bool UTC) const {
  return toString( "%Y-%m-%d %H:%M:%S %Z", UTC);
}

string Date::toString( const string& formatString, bool UTC)  const {
  time_type t= this->t;
  tm* pzeit;
  if (UTC)  pzeit= gmtime( &t);
  else      pzeit= localtime( &t);

  char str[80];
  const char* format= formatString.c_str();
  strftime( str, 80, format, pzeit);
  string s( str);
  return s;
}

// -------------------

bool operator == ( const Date& d1, const Date& d2) {
  return d1.getTimeValue() == d2.getTimeValue(); 
}

bool operator < ( const Date& d1, const Date& d2) { 
  return d1.getTimeValue() < d2.getTimeValue(); 
}

bool operator > ( const Date& d1, const Date& d2) { 
  return d1.getTimeValue() > d2.getTimeValue(); 
}


