From 2774e142e1081c4b4225a281b7348235d54ef354 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Fri, 23 Jul 2010 13:19:33 +0000 Subject: [PATCH] * Add a BTimeZone class for handling time zones. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37718 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/locale/TimeZone.h | 31 ++++++++++++++++++ src/kits/locale/Jamfile | 16 ++++++---- src/kits/locale/TimeZone.cpp | 62 ++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 headers/os/locale/TimeZone.h create mode 100644 src/kits/locale/TimeZone.cpp diff --git a/headers/os/locale/TimeZone.h b/headers/os/locale/TimeZone.h new file mode 100644 index 0000000000..20be021f33 --- /dev/null +++ b/headers/os/locale/TimeZone.h @@ -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 diff --git a/src/kits/locale/Jamfile b/src/kits/locale/Jamfile index eb3dd266a2..c5cf851fc9 100644 --- a/src/kits/locale/Jamfile +++ b/src/kits/locale/Jamfile @@ -11,8 +11,16 @@ local sources = Catalog.cpp Collator.cpp Country.cpp - Currency.cpp DefaultCatalog.cpp + HashMapCatalog.cpp + Language.cpp + LibbeLocaleBackend.cpp + LibraryInit.cpp + Locale.cpp + LocaleRoster.cpp + TimeZone.cpp + + Currency.cpp FloatFormat.cpp FloatFormatImpl.cpp FloatFormatParameters.cpp @@ -20,16 +28,10 @@ local sources = 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 diff --git a/src/kits/locale/TimeZone.cpp b/src/kits/locale/TimeZone.cpp new file mode 100644 index 0000000000..44f30406cf --- /dev/null +++ b/src/kits/locale/TimeZone.cpp @@ -0,0 +1,62 @@ +/* +Copyright 2010, Adrien Destugues +Distributed under the terms of the MIT License. +*/ + + +#include + +#include + +#include +#include + + +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; +}