X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ftime%2Fdatetime.cpp;h=8feeff2f0d21a798f153607ea3f3d02e93b36fd2;hp=23d0f2a5e7e223a3cdae6af23e6da121ab87d167;hb=967785734be5c3fc6f75da122c2d93ebbb338271;hpb=60a981f03d531f365c69f25877239ffe48bc14c3 diff --git a/source/time/datetime.cpp b/source/time/datetime.cpp index 23d0f2a..8feeff2 100644 --- a/source/time/datetime.cpp +++ b/source/time/datetime.cpp @@ -1,14 +1,6 @@ -/* $Id$ - -This file is part of libmspcore -Copyright © 2006 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include -#include -#include #include +#include #include "datetime.h" #include "timestamp.h" #include "units.h" @@ -151,7 +143,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 +179,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 +247,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 +256,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