我使用
Date
ResultSet
从数据库中检索 rsExpid
。
Date joindate = rsExpid.getDate("join_date_ad");
System.out.println(joindate);
int year = joindate.getYear();
System.out.println(year);
int month =joindate.getMonth();
System.out.println(month);
int day = joindate.getDay();
System.out.println(day);
dateTimeJoin4.setDate(year, month, day);
当我将
joindate
打印到控制台时,它正确显示为 2011-08-03
,但是当我将 year
打印到控制台时,我很惊讶地看到 111
。 同样,打印月份产生 7
,打印日期产生 3
。
变量
dateTimeJoin4
是我的SWTDateTime
。它没有设置任何值,也没有给出任何错误消息。有人可以帮我解决这个问题吗?
Date.getYear
和 Date.getMonth
的文档:
返回一个值,该值是从包含此 Date 对象所表示的时间点的年份中减去 1900 的结果(按照本地时区的解释)。
和
返回一个数字,表示包含此 Date 对象所表示的时间点或由此开始的月份。返回值在 0 到 11 之间,其中 0 代表一月。
Date.getDay
返回星期几,而不是一个月中的哪一天 - 您需要 Date.getDate()
(或者最好是完全不同的 API,Calendar
或 Joda Time)。
这与 SWT 的
DateTime
类型无关 - 毕竟,您只在最后一行使用它。当出现异常情况时,您的第一个求助点应该是文档。 SWT 的 DateTime.setDate
方法被记录为需要 1752 到 9999 之间的一年,因此 111 会混淆它。诚然,如果它抛出异常就好了,但即便如此......
尽管
Calendar
also 使用 0-11 表示月份,但您正在调用已弃用的方法这一事实应该对您有所提示。
我个人强烈鼓励您尽可能多地使用 Joda Time 进行约会和时间工作。与 Java 内置的日期和时间 API 相比,它是一种远远更优越的日期和时间 API。目前尚不清楚是否值得您在这里使用它(如果这是您必须做的全部),但如果您正在做任何根本重要的事情(包括解析、格式化或任何类型的算术),您应该使用它它。
我尝试使用此方法,它工作正常,因此此方法对其他人有用。
Calendar startCal = Calendar.getInstance();
startCal.setTime(joindate);
int months= startCal.get(Calendar.MONTH);
int years= startCal.get(Calendar.YEAR);
int days= startCal.get(Calendar.DAY_OF_MONTH);
System.out.println(months+1);
System.out.println(years);
System.out.println(days);
dateTimeJoin4.setDate(years, months+1, days);
getDay() 返回当天的位置,而不是日期,假设今天是星期一,它将返回 1,它从星期日开始,值为 0。
getMonth() 返回位置,因为 1 月份的起始值为 0,现在您得到的是 7 而不是 8。
要获取日期,您可以使用 SimpleDateFormat 或 DateFormat 通过传递格式字符串来获取日期
示例链接
http://www.roseindia.net/java/javadate/date-format.shtml
http://www.java-examples.com/java-simpledateformat-class-example
在现代 Java 中,使用 java.time 类。切勿使用有严重缺陷的遗留版本,例如
Date
、Calendar
和 SimpleDateFormat
。
java.time.LocalDate
LocalDate
。在 SQL 中,将列定义为类似于 SQL 标准类型的数据类型 DATE
。
检索:
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
写作:
myPreparedStatement.setObject( … , ld ) ;