X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ftime%2Ftimezone.cpp;h=76c3fb242463fe3f5f504c37e3f0a95a616d223c;hp=3910c24bbf3a88bd615c1a8bc7ccfd1700c65719;hb=be8ea216d23bf36bdfb2d3e302638782575fc136;hpb=5889d53f8f073ff0e1e1ebbd786abecd8352a7b3 diff --git a/source/time/timezone.cpp b/source/time/timezone.cpp index 3910c24..76c3fb2 100644 --- a/source/time/timezone.cpp +++ b/source/time/timezone.cpp @@ -1,115 +1,9 @@ -/* $Id$ - -This file is part of libmspcore -Copyright © 2008-2009 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include -#include -#include -#ifdef WIN32 -#include -#else -#include -#endif -#include -#include "timestamp.h" +#include #include "timezone.h" -#include "units.h" -#include "utils.h" using namespace std; -namespace { - -using Msp::Time::TimeZone; - -#ifndef WIN32 -long get_long(char *&ptr) -{ - long result=0; - for(unsigned i=0; i<4; ++i) - result=(result<<8)+static_cast(*ptr++); - return result; -} -#endif - -TimeZone get_local_timezone() -{ -#ifdef WIN32 - TIME_ZONE_INFORMATION tzinfo; - DWORD dst=GetTimeZoneInformation(&tzinfo); - if(dst==TIME_ZONE_ID_INVALID) - throw Msp::SystemError("Failed to get time zone information", GetLastError()); - - int offset=tzinfo.Bias; - if(dst==TIME_ZONE_ID_STANDARD) - offset+=tzinfo.StandardBias; - else if(dst==TIME_ZONE_ID_DAYLIGHT) - offset+=tzinfo.DaylightBias; - - return TimeZone(offset); -#else - int fd=open("/etc/localtime", O_RDONLY); - if(fd>=-1) - { - char hdr[44]; - int len=read(fd, hdr, sizeof(hdr)); - long gmtoff=-1; - string name; - if(len==44 && hdr[0]=='T' && hdr[1]=='Z' && hdr[2]=='i' && hdr[3]=='f') - { - char *ptr=hdr+20; - long isgmtcnt=get_long(ptr); - long isstdcnt=get_long(ptr); - long leapcnt=get_long(ptr); - long timecnt=get_long(ptr); - long typecnt=get_long(ptr); - long charcnt=get_long(ptr); - int size=timecnt*5+typecnt*6+isgmtcnt+isstdcnt+leapcnt*8+charcnt; - char buf[size]; - len=read(fd, buf, size); - if(len==size) - { - ptr=buf; - int index=-1; - time_t cur_time=Msp::Time::now().to_unixtime(); - for(int i=0; i0) - index=ptr[index]; - ptr+=timecnt; - - int abbrind=0; - for(int i=0; i=0 && i==index) || (index<0 && !ptr[4] && gmtoff==-1)) - { - gmtoff=get_long(ptr); - ++ptr; - abbrind=*ptr++; - } - else - ptr+=6; - } - - name=ptr+abbrind; - } - } - close(fd); - - if(gmtoff!=-1) - return TimeZone(-gmtoff/60, name); - } - return TimeZone(); -#endif -} - -} - namespace Msp { namespace Time { @@ -117,25 +11,23 @@ TimeZone::TimeZone(): name("UTC") { } -TimeZone::TimeZone(int minutes_west): - offset(minutes_west*min) +TimeZone::TimeZone(int minutes): + offset(minutes*min) { - if(minutes_west) + if(minutes) { - ostringstream ss; - ss.fill('0'); - int m=abs(minutes_west); - ss<<"UTC"<<(minutes_west<0 ? '-' : '+')<