Diffstat (limited to 'libopie2/opiepim/core/otimezone.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | libopie2/opiepim/core/otimezone.cpp | 88 |
1 files changed, 65 insertions, 23 deletions
diff --git a/libopie2/opiepim/core/otimezone.cpp b/libopie2/opiepim/core/otimezone.cpp index dab68af..e67715f 100644 --- a/libopie2/opiepim/core/otimezone.cpp +++ b/libopie2/opiepim/core/otimezone.cpp @@ -27,25 +27,29 @@ Boston, MA 02111-1307, USA. */ +#include "otimezone.h" + +/* STD */ #include <stdio.h> #include <stdlib.h> - #include <sys/types.h> -#include <opie2/otimezone.h> +namespace Opie +{ -namespace Opie { - - QDateTime utcTime( time_t t) { +QDateTime utcTime( time_t t ) +{ tm* broken = ::gmtime( &t ); QDateTime ret; ret.setDate( QDate( broken->tm_year + 1900, broken->tm_mon +1, broken->tm_mday ) ); ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); return ret; } - QDateTime utcTime( time_t t, const QString& zone) { +QDateTime utcTime( time_t t, const QString& zone ) +{ QCString org = ::getenv( "TZ" ); #ifndef Q_OS_MACX // Following line causes bus errors on Mac + ::setenv( "TZ", zone.latin1(), true ); ::tzset(); @@ -53,6 +57,7 @@ namespace Opie { ::setenv( "TZ", org, true ); #else #warning "Need a replacement for MacOSX!!" + tm* broken = ::localtime( &t ); #endif @@ -62,7 +67,8 @@ namespace Opie { return ret; } - time_t to_Time_t( const QDateTime& utc, const QString& str ) { +time_t to_Time_t( const QDateTime& utc, const QString& str ) +{ QDate d = utc.date(); QTime t = utc.time(); @@ -76,6 +82,7 @@ namespace Opie { QCString org = ::getenv( "TZ" ); #ifndef Q_OS_MACX // Following line causes bus errors on Mac + ::setenv( "TZ", str.latin1(), true ); ::tzset(); @@ -83,20 +90,27 @@ namespace Opie { ::setenv( "TZ", org, true ); #else #warning "Need a replacement for MacOSX!!" + time_t ti = ::mktime( &broken ); #endif + return ti; } } -namespace Opie { +namespace Opie +{ OTimeZone::OTimeZone( const ZoneName& zone ) - : m_name(zone) { -} -OTimeZone::~OTimeZone() { -} + : m_name( zone ) +{} + + +OTimeZone::~OTimeZone() +{} -bool OTimeZone::isValid()const { + +bool OTimeZone::isValid() const +{ return !m_name.isEmpty(); } @@ -104,42 +118,70 @@ bool OTimeZone::isValid()const { * we will get the current timezone * and ask it to convert to the timezone date */ -QDateTime OTimeZone::toLocalDateTime( const QDateTime& dt) { +QDateTime OTimeZone::toLocalDateTime( const QDateTime& dt ) +{ return OTimeZone::current().toDateTime( dt, *this ); } -QDateTime OTimeZone::toUTCDateTime( const QDateTime& dt ) { + + +QDateTime OTimeZone::toUTCDateTime( const QDateTime& dt ) +{ return OTimeZone::utc().toDateTime( dt, *this ); } -QDateTime OTimeZone::fromUTCDateTime( time_t t) { + + +QDateTime OTimeZone::fromUTCDateTime( time_t t ) +{ return utcTime( t ); } -QDateTime OTimeZone::toDateTime( time_t t) { + + +QDateTime OTimeZone::toDateTime( time_t t ) +{ return utcTime( t, m_name ); } + + /* * convert dt to utc using zone.m_name * convert utc -> timeZoneDT using this->m_name */ -QDateTime OTimeZone::toDateTime( const QDateTime& dt, const OTimeZone& zone ) { +QDateTime OTimeZone::toDateTime( const QDateTime& dt, const OTimeZone& zone ) +{ time_t utc = to_Time_t( dt, zone.m_name ); qWarning("%d %s", utc, zone.m_name.latin1() ); return utcTime( utc, m_name ); } -time_t OTimeZone::fromDateTime( const QDateTime& time ) { + + +time_t OTimeZone::fromDateTime( const QDateTime& time ) +{ return to_Time_t( time, m_name ); } -time_t OTimeZone::fromUTCDateTime( const QDateTime& time ) { + + +time_t OTimeZone::fromUTCDateTime( const QDateTime& time ) +{ return to_Time_t( time, "UTC" ); } -OTimeZone OTimeZone::current() { + + +OTimeZone OTimeZone::current() +{ QCString str = ::getenv("TZ"); OTimeZone zone( str ); return zone; } -OTimeZone OTimeZone::utc() { + + +OTimeZone OTimeZone::utc() +{ return OTimeZone("UTC"); } -QString OTimeZone::timeZone()const { + + +QString OTimeZone::timeZone() const +{ return m_name; } |