使用ICU库解析字符串中的时间戳,我做错了什么

Parsing a time stamp in a string using the ICU library, what am I doing wrong?

本文关键字:时间戳 什么 错了 ICU 字符串 使用      更新时间:2023-10-16

我正在尝试使用ICU库将时间戳从字符串转换为time_t值。

要做到这一点,我认为我所要做的就是创建一个时间实例并调用它的parse()函数。不幸的是,我从解析器得到的只是U_ILLEGAL_ARGUMENT_ERROR。

有一个显示意外行为的简化版本的代码:

#include <iostream>
#include <unicode/datefmt.h>
#include <unicode/errorcode.h>
#include <unicode/locid.h>
#include <unicode/smpdtfmt.h>
#include <unicode/timezone.h>
int main(int argc, char *argv[])
{
    LocalPointer<DateFormat> dt(DateFormat::createTimeInstance());
    UErrorCode err(U_ZERO_ERROR);
    UDate const result(dt->parse("12:05:33", err));
    std::cerr << "*** err = " << u_errorName(err)
              << " and result = " << result << "n";
    return 0;
}

当我运行这个时,输出是

*** err = U_ILLEGAL_ARGUMENT_ERROR and result = 0

我期待一些更像时间的表示,如12 x 3600 + 5 * 60 + 33 = 43533。

我做错了什么吗?从文档来看,这个库似乎能够转换各种类型的时间戳。

很可能,您的时间字符串的格式与createTimeInstance()返回的DateFormat对象的默认样式/区域设置不匹配。使用createTimeInstance()styleaLocale参数来指定parse()应该期望的特定样式/区域设置。