在android sqlite中 存储时间用current_timestamp与北京时间差8个时间,请问如何写才是正确时间

在android sqlite中 存储时间用current_timestamp与北京时间差8个时间,请问如何写才是正确时间,第1张

一般sqlite存时间要么是直接存string型 要么是long型,主要看你对时间类型的 *** 作是否复杂,如果只是展示,就存String,如果需要进行时间比较、取时间段内数据等查询 *** 作,就存long~

三种情况

1.java下使用new date()获取的时间会和真实的本地时间相差8小时

2.本地获取的时间没有错,存入数据库的时候时间相差8小时。

3.数据库时间没有错,获取到了后端,之后返回给前端相差8小时。

原因:

1.new date()调用的是jvm时间,而jvm使用的时间默认是0时区的时间,即:和北京时间将会相差8小时。

2.mybatis将本地的数据传入到mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时。

3.springboot中对加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默认是Json格式,

所以,对date类型的数据,在返回浏览器端时,会被springboot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。所以最终返回到前端结果是相差8小时。

解决方案:

1.手动设置jvm时间:将时间改为第8时区的时间。

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"))

2.在apprication.yml文件中配置一下数据库连接信息,url加上:&serverTimezone=GMT%2b8。

3.将spring的json构造器的时区改正即可,在application.yml文件中添加。

或者可以使用注解,在entity实体类的date数据上添加注解,那么数据库传回的data数据要转换为json格式的时候就是北京时间了,再次传回到前端的时候,也不会出现时区问题.

这是我自己试验的,可以随机将记录时间加上12或12小时以上,你试试看行不行。

DECLARE @time DATETIME,@rand INT

SET @rand=RAND()*20

SELECT @rand

--SET @rand=RAND()*20

IF @rand<12SET @rand=12

--DROP TABLE a

--CREATE TABLE a

--(

--f_id INT IDENTITY(1,1),

--f_time datetime

--)

--INSERT INTO a(f_time ) VALUES (' 2012-09-24 13:35:40 ')

UPDATE a SET f_time = DATEADD(HOUR,@rand,f_time) WHERE f_id=1

SELECT * FROM a


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10843840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存