* Add a BTimeZone class for handling time zones.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37718 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adrien Destugues 2010-07-23 13:19:33 +00:00
parent aa552b077a
commit 2774e142e1
3 changed files with 102 additions and 7 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,62 @@
/*
Copyright 2010, Adrien Destugues <pulkomandy@pulkomandy.ath.cx>
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;
}