我有一个由远程单元组成的IoT体系结构,它从多个传感器收集数据,然后在本地使用sqlite3数据库进行存储。这些数据不时地上传到云服务器。在云服务器中,有一个web应用程序,它显示所有上载数据的日志和结果。
到目前为止,我需要正确地处理日期时间和时区,以避免信息混合,并保证数据的及时正确重构。从现在起,我一直只使用UTC的日期时间来处理数据,但现在我需要构建一种处理时区的方法。我正在使用这个职位作为一般指导方针。
我的远程单元运行,我的远程软件是使用C++构建的。因此,每次我需要获得日期时间,我调用std::chrono::system_clock::now(),这是重新计算UTC的时间,无论哪个时区被设置(这个触摸被认为是正确的,基于这是我另一个问题的答案。)。
对于今天,本地和远程数据库只存储一个值,即用以下代码将seconds_since_epoch转换为毫秒:
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转换为人类可读的格式:
$dt = new DateTime();
$dt->setTimeStamp(value);
$dt->format("Y-m-d H:i:s");其中value是存储的bigint值。
目前,没有时区或时差被处理,这就是我需要帮助的地方。
据我所知,我需要在本地sqlite3和云mysql上创建一个新的数据库字段来存储时间偏移量(而不是时区,因为日光可能会改变时区)。
所以我的问题是:
sqlite3和mysql中存储时间偏移量的格式是什么?继续使用unix日期时间吗?如何将时区转换为unix日期时间?谢谢你的帮助。
发布于 2016-09-11 18:27:11
“最佳实践”是总是存储在世界协调时的任何时间。这些时间戳只需要在用户界面中转换为本地时间。也就是说,在您的网页上,应用程序窗口显示数据等等,所以时区只在显示时使用,而不是在存储时间时使用。
https://stackoverflow.com/questions/39275920
复制相似问题