我正在使用带有ICU后端的boost :: locale来在不同的时区之间进行时间转换。当创建boost :: local :: Calendar时,我可以传入一个像“America / New_York”这样的字符串来指定时区信息。
但是如何获得所有有效时区名称的列表?
来自ICU doc,它提到用户可以使用TimeZone.getAvailableIDs()方法迭代所有时区名称。但我甚至无法在timezone.h中找到一个名为getAvailableIDs的方法。
答案 0 :(得分:4)
您可以使用TimeZone.createEnumeration()
获取所有时区名称的列表。它在文档中说使用getAvailabeIDs
,但这种方法似乎不再存在。
答案 1 :(得分:1)
我设法使用ICU 4.4.2实现它:
#include <iostream>
#include <unicode/timezone.h>
#include <unicode/unistr.h>
using namespace icu;
int main()
{
StringEnumeration *timeZoneIds = TimeZone::createEnumeration();
UErrorCode status = U_ZERO_ERROR;
const UnicodeString *zoneId = timeZoneIds->snext(status);
while (zoneId != NULL && status == U_ZERO_ERROR)
{
std::string zoneIdString;
zoneId->toUTF8String(zoneIdString);
std::cout << zoneIdString << std::endl;
zoneId = timeZoneIds->snext(status);
}
delete timeZoneIds;
return 0;
}