首页 > 解决方案 > 从 MySQL 导入时如何在 solr 中保持时区?

问题描述

我正在运行 solr 7.7.x,它从 MySQL 导入数据,包括日期。在数据库中,时间保存到服务器当前时区。solr 导入后,它转换为 UTC。在我提取数据时,这会导致 2 小时的偏移:

MySQL:

"date_created":"2019-04-01 17:18:45"

MySQL导入查询:

SELECT DATE_FORMAT( c.date_created, '%Y-%m-%dT%H:%i:%sZ' ) AS date_created FROM cls

解决方案:

"date_created":"2019-04-01T19:18:45Z",

PHP:

date("Y-m-d H:i:s", strtotime($item['date_created']));

我也试过:

$tz = new DateTimeZone('Europe/Berlin');
$date = new DateTime($classified['date_created']);
$date->setTimezone($tz);
$ad['time_created'][$index] = $date->format('Y-m-d H:i:s');

同样的结果,时间偏移了 2 小时。如果我将 DateTimeZone 更改为 US,它将偏移 9h,这表明至少它有一些效果。

我暂时通过以下方式修复它:$ad['time_created'][$index] = date("Y-m-d H:i:s", strtotime($classified['date_created'])-7200);这对我来说似乎不是一个好的解决方案。

如何保持 MySQL 的时间以及在 solr 中处理时区的推荐方法是什么?

标签: phpsolr

解决方案


我不确定这是否会解决您的问题,但您可以通过为 solr 分配时区来将 Solr 的时区与 MySQL 时区同步,默认情况下,solr 在 UTC 时区工作。

如果 Solr 在 Windows 机器上,请在 solr-xxx\bin\solr.in.cmd 中指定时区,如下所示

set SOLR_TIMEZONE=<yourTimezone>

如果 Solr 在 linux 上,在 solr-xxx\bin\solr.in.sh

SOLR_TIMEZONE="<yourTimezone>"

推荐阅读