Enhancement - Date::toISO

- Added ISO date format support (19980119T070000Z) to Date class, for use
  in export.ical.
- Added unit test.
This commit is contained in:
Paul Beckingham 2010-05-31 13:18:41 -04:00
parent 8cd8c4753b
commit 3ef6aa9f8e
3 changed files with 25 additions and 1 deletions

View file

@ -25,6 +25,7 @@
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#include <iostream> #include <iostream>
#include <iomanip>
#include <sstream> #include <sstream>
#include <time.h> #include <time.h>
#include <assert.h> #include <assert.h>
@ -375,6 +376,25 @@ std::string Date::toEpochString ()
return epoch.str (); return epoch.str ();
} }
////////////////////////////////////////////////////////////////////////////////
// 19980119T070000Z = YYYYMMDDThhmmssZ
std::string Date::toISO ()
{
struct tm* t = gmtime (&mT);
std::stringstream iso;
iso << std::setw (4) << std::setfill ('0') << t->tm_year + 1900
<< std::setw (2) << std::setfill ('0') << t->tm_mon + 1
<< std::setw (2) << std::setfill ('0') << t->tm_mday
<< "T"
<< std::setw (2) << std::setfill ('0') << t->tm_hour
<< std::setw (2) << std::setfill ('0') << t->tm_min
<< std::setw (2) << std::setfill ('0') << t->tm_sec
<< "Z";
return iso.str ();
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Date::toEpoch (time_t& epoch) void Date::toEpoch (time_t& epoch)
{ {

View file

@ -47,6 +47,7 @@ public:
void toEpoch (time_t&); void toEpoch (time_t&);
time_t toEpoch (); time_t toEpoch ();
std::string toEpochString (); std::string toEpochString ();
std::string toISO ();
void toMDY (int&, int&, int&); void toMDY (int&, int&, int&);
const std::string toString (const std::string& format = "m/d/Y") const; const std::string toString (const std::string& format = "m/d/Y") const;
const std::string toStringWithTime (const std::string& format = "m/d/Y") const; const std::string toStringWithTime (const std::string& format = "m/d/Y") const;

View file

@ -34,7 +34,7 @@ Context context;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (143); UnitTest t (144);
try try
{ {
@ -150,6 +150,9 @@ int main (int argc, char** argv)
Date fromEpoch (epoch.toEpoch ()); Date fromEpoch (epoch.toEpoch ());
t.is (fromEpoch.toString (), epoch.toString (), "ctor (time_t)"); t.is (fromEpoch.toString (), epoch.toString (), "ctor (time_t)");
Date iso (1000000000);
t.is (iso.toISO (), "20010909T014640Z", "1,000,000,000 -> 20010909T014640Z");
// Date parsing. // Date parsing.
Date fromString1 ("1/1/2008"); Date fromString1 ("1/1/2008");
t.is (fromString1.month (), 1, "ctor (std::string) -> m"); t.is (fromString1.month (), 1, "ctor (std::string) -> m");