- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试将 boost local_date_time
转换为 UTC,但我对 utc_time() 的返回时间感到困惑。这是一个简化的代码:
#include "boost/date_time/local_time/local_time.hpp"
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
ptime dt = ptime(date(2015, Mar, 2), hours(0));
time_zone_ptr tz_cet(new boost::local_time::posix_time_zone("CET"));
local_date_time local_dt = boost::local_time::local_date_time(dt, tz_cet);
std::cout << local_dt << std::endl;
std::cout << local_dt.utc_time() << std::endl;
time_zone_ptr tz_utc(new boost::local_time::posix_time_zone("UTC"));
std::cout << local_dt.local_time_in(tz_utc) << std::endl;
}
输出:
2015-Mar-02 00:00:00 CET
2015-Mar-02 00:00:00
2015-Mar-02 00:00:00 UTC
UTC 应比 CET(欧洲中部时间)晚 1 小时。
这是一个错误还是我遗漏了什么?
最佳答案
boost::local_time::posix_time_zone("CET")
构造函数调用创建了一个带 CET
缩写的区域,并缺少有关与 UTC 的偏移量、时间偏移的信息DST 等,即调用 boost::local_time::posix_time_zone("CET")
和 boost::local_time::posix_time_zone("UTC")
仅在TZ缩写名称,其余同。 coliru code演示它。两个 TZ 的 base_utc_offset
方法调用返回 00:00:00
。
要解决此问题,必须设置 CET
区域的时间参数,例如“CET+01:00:00”或使用 tz_database类从 CSV 文件加载时区。
以下代码是原始修改后的代码,演示了如何解决问题。请注意,CET
时区描述并不完整,仅作为示例提供。
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
ptime dt = ptime(date(2015, Mar, 2), hours(0));
time_zone_ptr tz_cet(new boost::local_time::posix_time_zone("CET+01:00:00"));
local_date_time local_dt = boost::local_time::local_date_time(dt, tz_cet);
std::cout << local_dt << std::endl;
std::cout << local_dt.utc_time() << std::endl;
time_zone_ptr tz_utc(new boost::local_time::posix_time_zone("UTC"));
std::cout << local_dt.local_time_in(tz_utc) << std::endl;
}
coliru 上的相同代码可通过 this 获得链接。
关于c++ - 将 local_date_time CET boost 为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820841/
为什么DateFormat解析器无法解析CET? final String dateString = "Sat Jul 05 00:00:00 CET 1975"; final DateTime da
我有一个字符串日期列表列表,如下所示:'17/12/2017 19:34'。它们是 CET 日期。 如何将其转换为用户的浏览器日期? 我正在这样做: const tzGuess = moment.tz
我们的服务器在荷兰运行,但用户在英国使用该应用程序。 对于英国,2017-03-26 02:30:00 是有效的日期时间,但在荷兰则无效。 我正在使用代码通过设置时区来转换时间。但它没有给我正确的输出
这个问题在这里已经有了答案: Parsing a String to Date [duplicate] (4 个答案) 关闭 4 年前。 我正在尝试将此字符串转换为日期: 2016 年 3 月 1
我有三个不同的时间: 服务器时间 - “2014 年 2 月 19 日星期三 11:44 CET” 在服务器上开始 session 的时间 - “12:00h” 设备上的时间-“13:49” 我需要在
我在服务器上得到了一个 JSON,我尝试解析它。问题是有些日期看起来像: Tue, 03 Sep 2013 12:18:45 CEST 有些是: Sat, 17 Nov 2012 15:39:43 C
将本地时间转换为 UTC 很容易: var localTime = "2018-02-27 11:00"; moment(localTime).utc().format(); // result
我有一个脚本,在其中创建两个 Date 实例,第一个返回 CET 偏移时间戳中的日期,第二个返回 CEST 中的日期。我不明白为什么。 var start_date = new Date(2014,
我在时区和本杰明·富兰克林方面遇到了一些大麻烦。 我有一个包含 UTC 时间戳字段的表,没有存储时区。 我的目标是按星期几或按 n 小时之类的切片对该表的行进行分组。 我是如何进行到现在的: -- C
这个问题在这里已经有了答案: Convert Date/Time for given Timezone - java (16 个答案) 关闭 7 年前。 我想将 UTC 格式的日期转换为 CET 格
我需要将一些表从 MySQL 数据库移动到 PostgreSQL。所以我通过检查系统变量检查了MySQL服务器使用哪个时区: system time zone CET CET - 据我所知 -
我看到了这个帖子 Is Django corrupting timezone-aware DateTimeField when saving it to the Database?但它专门使用 pyt
要创建 UTC 日期对象,我们会这样写 new Date(Date.UTC(2012,02,30)); 如果没有 Date.UTC,它会采用 locale 并创建 Date 对象。如果我必须为在世界某
我有一个格式为 2018-03-19T06:00:00+01:00 的日期,该日期已经是 CET 时间。 当我将其保存在 Oracle 数据库列 timestamp 中时,与 CET 完全相同,并且再
奇怪的事情。我有 SQLite Android 数据库,其中日期保存为长值。我将它们读为日期对象,例如: new Date (cursor.getLong(4)) 接下来,在显示时,我使用 toStr
我有一些遗留的网络服务有时不会本地化日期。有时他们会这样做,所以我必须支持这两种情况。 它们应始终使用意大利的语言环境(标准时间为 UTC+1,夏令时为 UTC+2),但有时它们返回的日期会在日期 I
我对 JavaScript 中 Date 的 toString 方法有奇怪的行为。 我的同事有: const event = new Date('August 19, 1975 23:15:30');
我有将欧洲/布鲁塞尔时间转换为 UTC 的代码。这段代码会处理 CET 和 CEST 转换吗?即它是否也处理夏令时转换为 UTC?如果没有,有人可以建议如何处理吗? df['datetime'] =
如何将字符串“03/14/2016 12:41 CET”解析为日期时间对象? DateTime.TryParseExact(x, "mm/dd/yyyy hh:mm CET", null, Syst
我有两个时间序列文件,它们应该在 CET/CEST 中。其中不好的一个,没有以正确的方式写入值。对于好的 csv,请参见此处: #test_good.csv local_time,value ...
我是一名优秀的程序员,十分优秀!