我使用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
是我的SWT DateTime
。它没有设置任何值,也没有给出任何错误消息。可以请任何人帮助我吗?
答案 0 :(得分:7)
您有可能没有阅读Date.getYear
和Date.getMonth
的文档:
返回一个值,该值是从包含或以此Date对象表示的时间开始的年份减去1900的结果,如本地时区中所解释的那样。
和
返回一个数字,表示包含或以此Date对象表示的时刻开始的月份。返回的值介于0和11之间,值0表示1月。
分别。同样地,Date.getDay
会返回星期几,而不是月中的某天 - 您需要Date.getDate()
(或者最好是完全不同的API,Calendar
或Joda Time)。
这与SWT的DateTime
类型无关 - 毕竟,你只在最后一行使用它。当某些行为异常时,您的第一个停靠点应该是文档。记录SWT的DateTime.setDate
方法要求在1752年到9999之间一年,所以111会使它混淆。不可否认,如果它抛出异常会很好,但即便如此......
您调用已弃用的方法这一事实应该是对您的暗示,尽管Calendar
在其月份中使用0-11。
我个人强烈建议您尽可能多地使用Joda Time来完成日期和时间工作。它是Java内置的远优越的日期和时间API。目前还不清楚是否值得在这里使用它(如果这是所有你必须这样做)但是如果你正在做的所有重要(包括解析,格式化)或任何类型的算术)你应该使用它。
答案 1 :(得分:2)
我尝试使用此方法并且它正常工作,因此此方法对其他方法有用。
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);
答案 2 :(得分:0)
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