首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C++和PHP正确存储客户端和云服务器之间的时间戳和偏移量

如何使用C++和PHP正确存储客户端和云服务器之间的时间戳和偏移量
EN

Stack Overflow用户
提问于 2016-09-01 15:47:17
回答 1查看 395关注 0票数 1

我有一个由远程单元组成的IoT体系结构,它从多个传感器收集数据,然后在本地使用sqlite3数据库进行存储。这些数据不时地上传到云服务器。在云服务器中,有一个web应用程序,它显示所有上载数据的日志和结果。

到目前为止,我需要正确地处理日期时间和时区,以避免信息混合,并保证数据的及时正确重构。从现在起,我一直只使用UTC的日期时间来处理数据,但现在我需要构建一种处理时区的方法。我正在使用这个职位作为一般指导方针。

我的远程单元运行,我的远程软件是使用C++构建的。因此,每次我需要获得日期时间,我调用std::chrono::system_clock::now(),这是重新计算UTC的时间,无论哪个时区被设置(这个触摸被认为是正确的,基于这是我另一个问题的答案。)。

对于今天,本地和远程数据库只存储一个值,即用以下代码将seconds_since_epoch转换为毫秒:

代码语言:javascript
复制
int64_t TimePointToDb(const std::chrono::time_point<std::chrono::system_clock> &time)
{
    auto count = time.time_since_epoch();
    auto value = std::chrono::duration_cast<std::chrono::milliseconds>(count);
            return value.count();
}

返回的值存储在sqlite3字段(所有sqlite3字段都是strings)上,然后上传到mysql bigint格式。

在构建在PHP上的云服务器上,然后使用以下方法将此bigint转换为人类可读的格式:

代码语言:javascript
复制
$dt = new DateTime();
$dt->setTimeStamp(value);
$dt->format("Y-m-d H:i:s");

其中value是存储的bigint值。

目前,没有时区或时差被处理,这就是我需要帮助的地方。

据我所知,我需要在本地sqlite3和云mysql上创建一个新的数据库字段来存储时间偏移量(而不是时区,因为日光可能会改变时区)。

所以我的问题是:

  • ( a)采用“最佳做法”或“建议”办法处理时区问题。我的策略有效吗?
  • ( b)在C++中,如何获得系统当前的时间偏移量?
  • ( c)在sqlite3mysql中存储时间偏移量的格式是什么?继续使用unix日期时间吗?如何将时区转换为unix日期时间?
  • ( d)在云中,PHP如何显示正确的时间,现在考虑时间偏移?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-11 18:27:11

“最佳实践”是总是存储在世界协调时的任何时间。这些时间戳只需要在用户界面中转换为本地时间。也就是说,在您的网页上,应用程序窗口显示数据等等,所以时区只在显示时使用,而不是在存储时间时使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39275920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档