当前位置: 首页 > 面试题库 >

Joda Time-Hibernate将昨天的日期插入数据库

须峰
2023-03-14
问题内容

我现在有一个奇怪的问题。当我将今天的日期插入数据库时​​,它映射到昨天的日期,它随每个日期发生。例如,当我尝试插入2016-09-02时,数据库将其另存为2016-09-01。这是我的映射:

@DateTimeFormat(pattern="dd/MM/yyyy") 
@Column(name = "OrderDate", nullable = false)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private final LocalDate orderDate;

我创建实例是通过new LocalDate()
尝试在控制台上将值保存到数据库中之前打印出来的,并且它可以正确打印出来,但是数据库中的值是从前一天开始的://因此问题出在hibernate映射还是mysql。我用这种方法将日期保存到数据库中:

   @Autowired
    private SessionFactory sessionFactory;
   public void persist(T entity) {
        getSession().persist(entity);
    }

我什至不知道hibernate或mysql是否有问题。这真的很奇怪。你能给我任何指示可能是什么错误吗?在此先感谢mysql im版本使用:5.7.14-log

编辑:当我像这样在mysql中手动插入数据时:

insert into Orders values (149,14,'2016-09-03','2016-09-03',199.99)

日期正确保存

我的SQL设置:http :
//pastebin.com/87d6pkmE

我启用了登录mysql的功能,由mysql处理的代码为:

2016-09-03T19:54:06.016215Z   125 Connect   root@localhost on ElectronicsStoreDB using TCP/IP
2016-09-03T19:54:06.017215Z   125 Query /* mysql-connector-java-6.0.3 ( Revision: 9fb85a76ccb7506157e668f1516464a46e317d4a ) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS tx_isolation, @@wait_timeout AS wait_timeout
2016-09-03T19:54:06.018215Z   125 Query SET character_set_results = NULL
2016-09-03T19:54:06.018215Z   125 Query SET autocommit=1
2016-09-03T19:54:06.018215Z   125 Query SET autocommit=0
2016-09-03T19:54:06.021216Z   125 Query select product0_.ProductID as ProductI1_4_0_, product0_.Category as Category2_4_0_, product0_.Description as Descript3_4_0_, product0_.Discontinued as Disconti4_4_0_, product0_.Manufacturer as Manufact5_4_0_, product0_.Name as Name6_4_0_, product0_.UnitPrice as UnitPric7_4_0_, product0_.UnitsInStock as UnitsInS8_4_0_ from Products product0_ where product0_.ProductID=19
2016-09-03T19:54:06.045217Z   125 Query insert into Orders (CustomerID, OrderDate, ShippingDate, TotalPrice) values (14, '2016-09-02', '2016-09-02', 437.99)
2016-09-03T19:54:06.048217Z   125 Query insert into OrderDetails (OrderID, ProductID, Quantity, UnitPrice) values (163, 19, 1, 437.99)
2016-09-03T19:54:06.091220Z   125 Query update Products set Category='Printer', Description='USB 2.0, Wi-Fi', Discontinued=0, Manufacturer='EPSON', Name='XP-610', UnitPrice=437.99, UnitsInStock=134 where ProductID=19
2016-09-03T19:54:06.092220Z   125 Query commit
2016-09-03T19:54:06.094220Z   125 Query SET autocommit=1
2016-09-03T19:54:06.095220Z   125 Query select @@session.tx_read_only
2016-09-03T19:54:06.095220Z   125 Quit

所以日期错误

发现类似的线程,但并没有真正的帮助:我一直在使用两天的日期jdbc.driverClassName=com.mysql.cj.jdbc.Driver


问题答案:

好了,我设法解决了这个问题,我从以下位置更改了jdbc网址:

jdbc:mysql://localhost:3306/ElectronicsStoreDB?useUnicode=tr‌​ue&useJDBCCompliantT‌​imezoneShift=true&us‌​eLegacyDatetimeCode=‌​false&serverTimezone‌​=UTC

jdbc:mysql://localhost:3306/ElectronicsStoreDB?useTimezone=trueuseUnicode=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Warsaw

令人惊讶的是,它现在应该可以正常工作



 类似资料:
  • 问题内容: 如何显示和计算日期为昨天的值?我曾经在数据库中插入日期。例: 我想显示表中存在多少个具有多个URL的URL,以及昨天有多少个URL被访问过。结果示例: 我已经有了获取昨天日期的想法,但是我没有一个想法来计算昨天存在一个URL的次数和计算表中存在URL的次数。 问题答案: 获取昨天日期的最简单最佳方法是: 您的查询将是: 出于好奇,为您提供满足条件的行 数 的原因(否则将需要繁琐且冗长的

  • Python3 实例 以下代码通过导入 datetime 模块来获取昨天的日期:# Filename : test.py # author by : www.runoob.com # 引入 datetime 模块 import datetime def getYesterday(): today=datetime.date.today() oneday=datetime.timedelta(day

  • 问题内容: 我的日期字符串格式如下: 2012年1月2日 使用Instant.parse()方法后,即时实例成为2012年1月1日的日期,该日期早1天,为什么?如果原始日期字符串为2012年1月1日,则Instant的日期为2011年12月31日。 我正在使用MongoDB来存储这些日期。我已经测试过了,它显示了格式化日期字符串->即时时没有错误。但是,当我将此Date类型的对象插入MongoDB

  • 问题内容: 我有一个关于将PHP中的日期插入Oracle DB的问题 所以我在PHP中有这个 问题是,我没有在数据库中插入任何新记录。DELIVERY_DATE的数据类型是 问题答案: 几天前,我遇到了同样的问题,这是日期格式问题。所以我更改了日期格式,它对我有用。您可以尝试下面的代码并对其进行测试,如果它可以工作,则可以根据需要修改代码。

  • 问题内容: 我需要找出一种将带有字段的记录插入数据库的方法,但我陷入了困境。 有谁知道我该怎么做?现在我有类似的东西。 但是,当我运行类似这样的命令时,出现错误:值的字符串表示形式的语法不正确。 这是sql语句的样子: 谢谢 问题答案: 当然,这将使你的代码更好,但是要回答你的问题,你需要告诉的字符串表示形式。在中(你不指定数据库供应商的名称),使用以下函数将字符串日期转换为:

  • 问题内容: 我需要在Python中以这种格式找到“昨天”的日期。 例如,今天的日期将这样表示:111009 我今天可以轻松完成此操作,但是在“昨天”自动执行此操作有麻烦。 问题答案: 采用