Php 从MySQL导入时,如何在solr中保留时区?

Php 从MySQL导入时,如何在solr中保留时区?,php,solr,Php,Solr,我正在运行Solr7.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 解决方案: PHP: 我还

我正在运行Solr7.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
解决方案:

PHP:

我还尝试:

$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,它将偏移bei 9h,这表明它至少有一些效果

我临时修复了它:
$ad['time\u created'][$index]=date(“Y-m-dh:I:s”,strotime($classified['date\u created'])-7200)这对我来说不是一个好的解决方案


我如何保持MySQL的时间,以及建议采用什么方法来处理solr中的时区?

我不确定这是否能解决您的问题,但您可以通过为solr分配一个时区来同步solr的时区和MySQL时区,默认情况下solr在UTC时区上工作

如果Solr在Windows计算机上,请按以下方式在Solr-x.x.x\bin\Solr.in.cmd中分配时区

set SOLR_TIMEZONE=<yourTimezone>
set SOLR\u时区=
如果Solr在linux上,则在Solr-x.x.x\bin\Solr.in.sh中

SOLR_TIMEZONE="<yourTimezone>"
SOLR\u时区=“”

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

如果Solr在Windows计算机上,请按以下方式在Solr-x.x.x\bin\Solr.in.cmd中分配时区

set SOLR_TIMEZONE=<yourTimezone>
set SOLR\u时区=
如果Solr在linux上,则在Solr-x.x.x\bin\Solr.in.sh中

SOLR_TIMEZONE="<yourTimezone>"
SOLR\u时区=“”

Solr没有时区的概念,除了查询时的
TZ
参数。内部的一切都将以UTC为单位。但是,如果MySQL在导出时从时区(欧洲/柏林)转换,那么正确的值不应该是
15:18:45
,因为欧洲/柏林目前是
+0200
?很有趣。我已经在问题中添加了MySQL导入查询。这可能是原因吗?Berlin ist+2 UTCYou can—这将允许您记录查询返回的实际值,并帮助确定该值会发生什么。初步猜测:JavaODBC认为MySQL返回的日期是UTC,但本地服务器设置为+02:00,因此增加了两个小时。除了查询时的
TZ
参数外,.Solr没有时区的概念。内部的一切都将以UTC为单位。但是,如果MySQL在导出时从时区(欧洲/柏林)转换,那么正确的值不应该是
15:18:45
,因为欧洲/柏林目前是
+0200
?很有趣。我已经在问题中添加了MySQL导入查询。这可能是原因吗?Berlin ist+2 UTCYou can—这将允许您记录查询返回的实际值,并帮助确定该值会发生什么。初步猜测:JavaODBC认为MySQL返回的日期是UTC,但本地服务器设置为+02:00,因此增加了两个小时。有。