X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftime%2Fdatetime.cpp;h=7fa8ceefbac56c0ac5b7507906ff15b0df1f8d31;hb=c8c97ab483cfbf1bb3d0788cf729be92091ba2fc;hp=23d0f2a5e7e223a3cdae6af23e6da121ab87d167;hpb=60a981f03d531f365c69f25877239ffe48bc14c3;p=libs%2Fcore.git diff --git a/source/time/datetime.cpp b/source/time/datetime.cpp index 23d0f2a..7fa8cee 100644 --- a/source/time/datetime.cpp +++ b/source/time/datetime.cpp @@ -6,9 +6,8 @@ Distributed under the LGPL */ #include -#include -#include #include +#include #include "datetime.h" #include "timestamp.h" #include "units.h" @@ -151,7 +150,7 @@ void DateTime::add_days(int days) new_year += cycles; - if((year-fudge)%4+cycles>=4) + if((year-fudge)%4+cycles>=4 && (new_year%100>=4 || new_year%400<4)) { // We passed a leap year - decrement days if(days==0) @@ -187,7 +186,7 @@ void DateTime::set_timezone(const TimeZone &tz) void DateTime::convert_timezone(const TimeZone &tz) { - add_raw((zone.get_offset()-tz.get_offset()).raw()); + add_raw((tz.get_offset()-zone.get_offset()).raw()); zone = tz; } @@ -255,8 +254,7 @@ TimeStamp DateTime::get_timestamp() const string DateTime::format(const string &fmt) const { - ostringstream ss; - ss.fill('0'); + string result; for(string::const_iterator i=fmt.begin(); i!=fmt.end(); ++i) { if(*i=='%') @@ -265,31 +263,31 @@ string DateTime::format(const string &fmt) const if(i==fmt.end()) break; else if(*i=='d') - ss<=12) ? "PM" : "AM"); + result += ((hour>=12) ? "PM" : "AM"); else if(*i=='S') - ss<(offs/Time::min)); - ss<<(offs