将时间戳(以毫秒为单位)转换为boost中的时区
Convert timestamp in milliseconds into a timezone in boost
我有一个客户端java库,它使用joda时间库解析带时区的ISO时间戳,并返回一个长值(UTC中自epoch以来的毫秒)。我需要开发一个服务器端框架(C++),它将使用自epoch以来的毫秒,并在任何给定的时区(例如"欧洲/苏黎世")生成时间戳。我可以像这样使用local_date_time选项:
posix_time ptime = epoch(date(1970,1,1)) + ms; //ms sent from client
tz_database tz;
tz.load_from_file(/*path to date_time_zonespec.csv*/);
time_zone_ptr ptr = tz.time_zone_from_region(regionStr); //regionStr = Europe/Zurich
local_date_time mytime(ptime, ptr);
然而,我从这篇文章中了解到(C++:你会选择boost::date_time还是icu::date/time库。更好的选择是boost::locale。有没有一种方法可以使用boost::locale实现与上面相同的步骤?我在网上用boost::Locale搜索示例,但找不到任何与我想要的相似的示例。
也许这个免费的开源C++11/14时区库可以帮助:
#include "tz.h"
#include <iostream>
date::zoned_time<std::chrono::milliseconds>
convert(date::sys_time<std::chrono::milliseconds> tp)
{
return date::make_zoned(date::locate_zone("Europe/Zurich"), tp);
}
int
main()
{
using namespace std::chrono;
std::cout << convert(date::floor<milliseconds>(system_clock::now())) << 'n';
std::cout << convert(date::sys_time<milliseconds>{1469137715906ms}) << 'n';
}
这只是我的输出:
2016-07-21 23:48:35.906 CEST
2016-07-21 23:48:35.906 CEST
它是建立在C++11/14<chrono>
库之上的。std::chrono::system_clock
测量自1970-01-01 UTC以来的时间。时区库使用IANA时区数据库帮助将其转换为本地化时区。
文件齐全,易于使用。高性能。在编译时捕获许多错误。
示例和食谱。
相关文章:
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- Boost.Spirit将表达转换为AST
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 将"boost::tuple "转换为"boost::fusion::tuple&quo
- 用于 boost::p roperty_tree 的通用枚举转换器
- 如何将 boost::hana::map 转换为 lambda
- 如何将 boost::hana::tuple 转换为 std::变体
- 将 boost::文件系统::p ath 转换为 char?
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 为什么要 boost::p roperty_tree::write_json() 将整数值转换为字符串?这是不正确的
- 如何正确地将boost::asio::buffers_iterator转换为InputIterator
- 如何将boost::asio::ip::address_v6 ip转换为2个uint64_t数字,并从2个uint 64
- 如何将 boost::beast 的响应<buffer_body>转换为响应<string_body>?
- 提取并转换 boost::p ython::list 的列表元素
- 我已经在我的运算符 [] 中使用了一个代理来隐式转换 boost::变体。如何通过运算符 [] 维护分配?
- 无法转换 boost::lambda::..到长无符号的 int
- 如何从字符串中强制转换Boost::thread::id
- 转换boost::变体类型的std::vector
- 不能转换boost::lambda::placeholder1_type