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

java.util.Date到java.sql.Date的转换给出错误的月份

勾长卿
2023-03-14
问题内容

考虑以下代码段:

Calendar futureDate = Calendar.getInstance();
int year = 2011;
int month = 11;
int day = 14;
futureDate.set(year,month, day);
System.out.println(futureDate.toString());
java.sql.Date sqlDate  = new java.sql.Date( futureDate.getTime().getTime());

从futureDate.toString()的打印输出为:

..... YEAR = 2011,MONTH = 11,WEEK_OF_YEAR = 43,WEEK_OF_MONTH = 4,DAY_OF_MONTH
= 14,DAY_OF_YEAR = 289,DAY_OF_WEEK = 1,DAY_OF_WEEK_IN_MONTH = 3,AM_PM = 0,HOUR
= 11,HOUR_OF_DAY = 11,MINUTE = 32,SECOND = 51,MILLISECOND = 117,ZONE_OFFSET =
-18000000,DST_OFFSET = 3600000]

这表明Calendare对象具有正确的日期。但是,在转换为sql日期并存储在数据库中(MySQL通过JDBC)之后,该日期的MySQL表显示为“
2011-12-14”,而不是“ 2011-11-14”。我本来会怀疑语言环境和时区,但是这些会导致一天中的时间而不是日期的月份中出现差异。

关于我做错了什么的任何线索?


问题答案:

Calendar#set(int, int, int)将month参数解释为从零开始的值,因此futureDate.set(2011, 11, 14)将日历的month设置为December。



 类似资料:
  • 问题内容: 我在函数上发现错误,从DatatypeFactory df初始化newInstance()方法后,它显示错误结果,我得到了另一个错误: 我只是将包裹名称从 然后投射: 问题答案: 这是不可能的 投 自到。您需要从一种类型 转换 为另一种类型:

  • 问题内容: 在保留时间戳的同时将java.sql.Date对象转换为java.util.Date的最简单方法是什么? 我试过了: 没有运气。它仍然只将日期部分存储到变量中。 问题答案: java.sql.Date类设计为仅包含日期而没有时间,因此您看到的转换结果对该类型是正确的。您需要使用java.sql.Timestamp来获取带时间的完整日期。

  • 问题内容: 我正在尝试使用作为输入,然后使用它创建查询-所以我需要一个。 我很惊讶地发现它不能隐式或显式地进行转换-但我什至不知道该怎么做,因为对我来说还很新。 问题答案: 没关系....

  • 问题内容: :什么时候使用,为什么? 问题答案: 恭喜,你已经使用JDBC达到了我最喜欢的功能:Date类处理。 基本上,数据库通常至少支持三种形式的日期时间字段,即日期,时间和时间戳。它们每个在JDBC中都有一个对应的类,并且每个都进行了扩展。这三个中的每个的快速语义如下: 对应于SQL DATE,这表示它存储年,月和日,而时,分,秒和毫秒被忽略。此外,sql.Date它与时区无关。 对应于SQ

  • 问题内容: 您好,我的代码正在抛出。StackTrace显示: 即@ ps.setDate(6,(Date)affiliate.getDate()); 在DAO 以下是我的servlet: 以下是我的DAO: 以下是我的DTO: 请在这方面帮助我 问题答案: 由于文档说,将在参数的需要类型的Date对象。但是您似乎在课堂上使用了对象。 这就是为什么你得到了。 要解决此问题,您需要将类中的对象类型更

  • 本文向大家介绍java.util.Date与java.sql.Date的区别,包括了java.util.Date与java.sql.Date的区别的使用技巧和注意事项,需要的朋友参考一下 我数据库里用到了日期类型。用java编程的时候同时import了java.util.*和java.sql.*,发现直接申明Date类型 Date dt; 会报错,查了一下才发现有java.util.Date和ja