语言环境"en_US"中 std::time_get::get_time() 的正确时间格式是什么?
What is the correct time format for std::time_get::get_time() in locale "en_US"?
在locale("en_US")
中,我无法按std::time_get::get_time()
读取时间。我尝试了以下格式,但它不起作用。当我将区域设置更改为locale("en_GB")
时,它运行良好。那么区域设置"en_US"的正确时间格式是什么?
来源是:
void try_get_time_from_str(const std::string& s) {
std::istringstream str(s);
std::ios_base::iostate err = std::ios_base::goodbit;
std::tm t;
std::istreambuf_iterator<char> ret =
std::use_facet<std::time_get<char> >(str.getloc()).get_time(
std::istreambuf_iterator<char>(str),
std::istreambuf_iterator<char>(),
str, err, &t
);
str.setstate(err);
if(str) {
std::cout << "Hours: " << t.tm_hour << ' '
<< "Minutes: " << t.tm_min << ' '
<< "Seconds: " << t.tm_sec << 'n';
} else {
std::cout << "Parse failed. Unparsed string: ";
std::copy(ret, std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(std::cout));
std::cout << 'n';
}
}
int main() {
std::locale::global(std::locale("en_US"));
try_get_time_from_str("01:01:01");
try_get_time_from_str("1:01:01");
try_get_time_from_str("1:1:1");
try_get_time_from_str("01:01");
try_get_time_from_str("1:01");
try_get_time_from_str("1:1");
try_get_time_from_str("01:01:01 PM");
try_get_time_from_str("1:01:01 PM");
try_get_time_from_str("1:1:1 PM");
try_get_time_from_str("01:01 PM");
try_get_time_from_str("1:01 PM");
try_get_time_from_str("1:1 PM");
return 0;
}
结果是:
Parse failed. Unparsed string: 01:01:01
Parse failed. Unparsed string: 1:01:01
Parse failed. Unparsed string: 1:1:1
Parse failed. Unparsed string: 01:01
Parse failed. Unparsed string: 1:01
Parse failed. Unparsed string: 1:1
Parse failed. Unparsed string: 01:01:01 PM
Parse failed. Unparsed string: 1:01:01 PM
Parse failed. Unparsed string: 1:1:1 PM
Parse failed. Unparsed string: 01:01 PM
Parse failed. Unparsed string: 1:01 PM
Parse failed. Unparsed string: 1:1 PM
我尝试以locale("en_US")
格式"%X"输出时间,结果是"10:27:06 AM"。文档说默认格式是 "%X" 对于std::time_get::get_time()
,但它确实无法读取。
PS:我在LINUX上使用g++(GCC)4.4.7 20120313(Red Hat 4.4.7-3)。
它看起来像一个编译器错误。拥有 g++ 4.72 并运行:
#include <ctime>
#include <iostream>
#include <locale>
#include <sstream>
void try_get_time_from_str(const std::string& s) {
std::istringstream str(s);
std::ios_base::iostate err = std::ios_base::goodbit;
std::tm t;
std::istreambuf_iterator<char> ret =
std::use_facet<std::time_get<char> >(str.getloc()).get_time(
std::istreambuf_iterator<char>(str),
std::istreambuf_iterator<char>(),
str, err, &t
);
str.setstate(err);
if(str) {
std::cout << "Hours: " << t.tm_hour << ' '
<< "Minutes: " << t.tm_min << ' '
<< "Seconds: " << t.tm_sec << 'n';
} else {
std::cout << "Parse failed. Unparsed string: ";
std::copy(ret, std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(std::cout));
std::cout << 'n';
}
}
int main() {
std::time_t timestamp;
std::time ( ×tamp );
std::tm * now = std::localtime ( ×tamp );
std::cout << "GB: ";
{
std::locale::global(std::locale("en_GB.utf8"));
std::ostringstream out;
std::use_facet< std::time_put<char> >(out.getloc()).put(
out,
out,
' ',
now,
'X');
try_get_time_from_str(out.str());
}
std::cout << "US: ";
{
std::locale::global(std::locale("en_US.utf8"));
std::ostringstream out;
std::use_facet< std::time_put<char> >(out.getloc()).put(
out,
out,
' ',
now,
'X');
try_get_time_from_str(out.str());
}
return 0;
}
给:
GB: Hours: 14 Minutes: 59 Seconds: 53
US: Parse failed. Unparsed string: 02:59:53 PM
相关文章:
- Cpp-Tuple使用带有变量的get
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 通过 get-Method 访问变量在类外不起作用
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 解析某些行的文本和输出"time of appearance"
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 如何使用 fstream 的 .get 字符串?
- c++ get millsecond time