boost::local_time 读取不正确的iso_extended_format
boost::local_time Does not read correct iso_extended_format
我需要用ISO扩展格式读取时间,并将其转换为UTC时间,就像Javascript的Date
对象一样:
新日期("2014-12-19T15:53:14.533+01:00")
2014-12-19T14:53:14.533Z
在 boost 中,没有boost::posix_time::from_iso_extended_string
,boost::posix_time::from_iso_string
不会解析时区。我尝试使用boost::local_time::local_date_time
但似乎也不起作用:
std::stringstream ss("2014-12-19T15:53:14.533+01:00");
boost::local_time::local_time_input_facet*
ifc= new boost::local_time::local_time_input_facet();
ifc->set_iso_extended_format();
ss.imbue(std::locale(ss.getloc(), ifc));
boost::local_time::local_date_time
zonetime(boost::local_time::not_a_date_time);
if( ss >> zonetime ) {
time = zonetime.utc_time();
}
有什么帮助或建议吗?
住在科里鲁
根本不解析时区:
住在科里鲁
#include <iostream>
#include <sstream>
#include <boost/date_time.hpp>
int main()
{
boost::posix_time::ptime time;
try
{
std::stringstream ss("2014-12-19T15:53:14.533+01:00");
boost::local_time::local_time_input_facet* ifc= new boost::local_time::local_time_input_facet();
ifc->set_iso_extended_format();
ss.imbue(std::locale(ss.getloc(), ifc));
boost::local_time::local_date_time zonetime(boost::local_time::not_a_date_time);
if( ss >> zonetime ) {
time = zonetime.utc_time();
}
std::string remains;
if (std::getline(ss, remains))
std::cout << "Remaining: '" << remains << "'n";
}
catch( std::exception const& e )
{
std::cout << "ERROR:" << e.what() <<std::endl;
}
std::cout << "UTC time: " << time;
return 0;
}
指纹:
Remaining: '+01:00'
UTC time: 2014-Dec-19 15:53:14.533000
文档说:
目前,local_date_time对象只能使用 Posix 时区字符串流式传输。可以在 posix_time_zone 类的文档中找到 Posix 时区字符串的完整说明。
因此,您需要单独解析时区或使用 POSIX 时区。是的,我认为这是非常令人困惑和不足的。实际上,您不能将扩展 iso 格式与本地时间一起使用。
您可以改用%ZP
:
住在科里鲁
#include <iostream>
#include <sstream>
#include <boost/date_time.hpp>
int main()
{
boost::posix_time::ptime time;
try
{
std::stringstream ss("2014-12-19T15:53:14.533-07:00");
boost::local_time::local_time_input_facet* ifc= new boost::local_time::local_time_input_facet("%Y-%m-%d %H:%M:%S%F %ZP");
//ifc->set_iso_extended_format();
ss.imbue(std::locale(ss.getloc(), ifc));
using namespace boost::local_time;
local_date_time ldt(not_a_date_time);
if(ss >> ldt) {
time = ldt.utc_time();
std::string remains;
if (std::getline(ss, remains))
std::cout << "Remaining: '" << remains << "'n";
}
}
catch( std::exception const& e )
{
std::cout << "ERROR:" << e.what() <<std::endl;
}
std::cout << "UTC time: " << time;
return 0;
}
指纹
UTC time: 2014-Dec-19 22:53:14.533000
相关文章:
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- ISO C++禁止声明没有类型的"setInputNombre"
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- 为什么我会收到此警告:ISO c++ 禁止可变长度数组"v"[-Wvla]
- ISO 中禁止可变长度数组 C++崇高文本中的错误 3.
- 是否存在经过认证(ISO 26262或类似)C++标准库?
- 张量流错误 此文件需要编译器和库支持 ISO C++ 2011 标准
- 错误:ISO C++禁止可变长度数组"subVec"[-Werror=vla]
- Clang-CL 警告 strnicmp 已弃用,请使用 ISO C 并C++符合标准的名称_strnicmp
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- DEV C++ 第 69 行 [错误] ISO "for" 范围更改了"i"的名称查找 [-允许]
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- 警告:ISO C++禁止可变长度数组
- 包括C++标题,"..."与<...>风格,ISO / IEC官方意见?
- 在 c++ 中将 ISO 日期时间转换为本地日期时间并提取时间
- 在 Boost 中解析 RFC3339/ISO 8601 时间戳
- :<command-line>0:3:警告:ISO C++11 要求宏名称后有空格
- C++错误:ISO C++禁止声明.没有类型
- 警告:ISO C++禁止将字符串常量转换为'char*' [-Wwrite-strings]
- 将 OR 放入 if 语句会导致 ISO C++禁止指针和整数之间的比较(f 允许)