Author: pulkomandy Date: 2010-07-23 15:19:33 +0200 (Fri, 23 Jul 2010) New Revision: 37718 Changeset: http://dev.haiku-os.org/changeset/37718 Added: haiku/trunk/headers/os/locale/TimeZone.h haiku/trunk/src/kits/locale/TimeZone.cpp Modified: haiku/trunk/src/kits/locale/Jamfile Log: * Add a BTimeZone class for handling time zones. Added: haiku/trunk/headers/os/locale/TimeZone.h =================================================================== --- haiku/trunk/headers/os/locale/TimeZone.h (rev 0) +++ haiku/trunk/headers/os/locale/TimeZone.h 2010-07-23 13:19:33 UTC (rev 37718) @@ -0,0 +1,31 @@ +/* +Copyright 2010, Haiku, Inc. +Distributed under the terms of the MIT License. +*/ + + +#ifndef __TIMEZONE_H__ +#define __TIMEZONE_H__ + + +class BString; +namespace icu_44 { + class TimeZone; +} + + +class BTimeZone { + public: + BTimeZone(const char* zoneCode); + ~BTimeZone(); + + void Name(BString& name); + void Code(BString& code); + int OffsetFromGMT(); + + private: + icu_44::TimeZone* fICUTimeZone; +}; + + +#endif Modified: haiku/trunk/src/kits/locale/Jamfile =================================================================== --- haiku/trunk/src/kits/locale/Jamfile 2010-07-23 13:11:55 UTC (rev 37717) +++ haiku/trunk/src/kits/locale/Jamfile 2010-07-23 13:19:33 UTC (rev 37718) @@ -11,8 +11,16 @@ Catalog.cpp Collator.cpp Country.cpp + DefaultCatalog.cpp + HashMapCatalog.cpp + Language.cpp + LibbeLocaleBackend.cpp + LibraryInit.cpp + Locale.cpp + LocaleRoster.cpp + TimeZone.cpp + Currency.cpp - DefaultCatalog.cpp FloatFormat.cpp FloatFormatImpl.cpp FloatFormatParameters.cpp @@ -20,16 +28,10 @@ FormatImpl.cpp FormatParameters.cpp GenericNumberFormat.cpp - HashMapCatalog.cpp IntegerFormat.cpp IntegerFormatImpl.cpp IntegerFormatParameters.cpp langinfo.cpp - Language.cpp - LibbeLocaleBackend.cpp - LibraryInit.cpp - Locale.cpp - LocaleRoster.cpp NumberFormat.cpp NumberFormatImpl.cpp NumberFormatParameters.cpp Added: haiku/trunk/src/kits/locale/TimeZone.cpp =================================================================== --- haiku/trunk/src/kits/locale/TimeZone.cpp (rev 0) +++ haiku/trunk/src/kits/locale/TimeZone.cpp 2010-07-23 13:19:33 UTC (rev 37718) @@ -0,0 +1,62 @@ +/* +Copyright 2010, Adrien Destugues <pulkomandy@xxxxxxxxxxxxxxxxx> +Distributed under the terms of the MIT License. +*/ + + +#include <TimeZone.h> + +#include <String.h> + +#include <unicode/timezone.h> +#include <ICUWrapper.h> + + +BTimeZone::BTimeZone(const char* zoneCode) +{ + fICUTimeZone = TimeZone::createTimeZone(zoneCode); +} + + +BTimeZone::~BTimeZone() +{ + delete fICUTimeZone; +} + + +void +BTimeZone::Name(BString& name) +{ + UnicodeString unicodeName; + fICUTimeZone->getDisplayName(unicodeName); + + BStringByteSink converter(&name); + unicodeName.toUTF8(converter); +} + + +void +BTimeZone::Code(BString& code) +{ + UnicodeString unicodeName; + fICUTimeZone->getID(unicodeName); + + BStringByteSink converter(&code); + unicodeName.toUTF8(converter); +} + + +int +BTimeZone::OffsetFromGMT() +{ + int32_t rawOffset; + int32_t dstOffset; + time_t now; + UErrorCode error = U_ZERO_ERROR; + fICUTimeZone->getOffset(time(&now) * 1000, FALSE, rawOffset, dstOffset + , error); + if (error != U_ZERO_ERROR) + return 0; + else + return rawOffset + dstOffset; +}