solr因为时区设置问题,导致正常入索引后的date类型的时间会减少8小时,跟多初学者会为此苦恼,今天我把个人解决的方案给大家说一下,希望能帮助到大家.
方案一:
对date类型的时间字段, 如果可以的话,可以将solr的时间field的类型改为string类型,这样也就不存在时差的问题了,这个方案是可行的.
方案二:
既然知道solr入索引时,时间类型的字段会减少8小时,那么我们为何不将入索引前的时间先手动添加8小时后,再添加入索引操作,这也就一种解决办法,我来分析几种情况,希望对大家有帮助:
(1) 一般数据都是从数据库里面获取,通过sql形式读取数据,然后再入索引,部分人可能会根据方案二将结果取出来,然后再自己将时间处理为加8小时,然后再入索引,其实不必自己去写,因为sql本身都提供了一些可以在sql语句中直接使用的函数,比如Mysql, mysql提供了date_add(pubdate, interval +8 hour)这样一个函数,pubdate是你要查询的date类型的字段名称,后面的+8表示读取数据库时间之后再加8小时,这样,时间就变为我们想要的时间了(其他数据库也提供了类似的函数,大家自己去查一下就可以解决).
(2) 对非数据库来源的数据,通过java提供的时间操作类,也是很容易处理的,这里只是简单提一下,使用Calendar即可,细节在此就不多说了.
除了以上两种方式大家如果有什么更好的建议,期待大家留言.
方案一:
对date类型的时间字段, 如果可以的话,可以将solr的时间field的类型改为string类型,这样也就不存在时差的问题了,这个方案是可行的.
方案二:
既然知道solr入索引时,时间类型的字段会减少8小时,那么我们为何不将入索引前的时间先手动添加8小时后,再添加入索引操作,这也就一种解决办法,我来分析几种情况,希望对大家有帮助:
(1) 一般数据都是从数据库里面获取,通过sql形式读取数据,然后再入索引,部分人可能会根据方案二将结果取出来,然后再自己将时间处理为加8小时,然后再入索引,其实不必自己去写,因为sql本身都提供了一些可以在sql语句中直接使用的函数,比如Mysql, mysql提供了date_add(pubdate, interval +8 hour)这样一个函数,pubdate是你要查询的date类型的字段名称,后面的+8表示读取数据库时间之后再加8小时,这样,时间就变为我们想要的时间了(其他数据库也提供了类似的函数,大家自己去查一下就可以解决).
(2) 对非数据库来源的数据,通过java提供的时间操作类,也是很容易处理的,这里只是简单提一下,使用Calendar即可,细节在此就不多说了.
除了以上两种方式大家如果有什么更好的建议,期待大家留言.