在Java中需要SWT DateTime的帮助

时间:2011-08-16 05:08:35

标签: java datetime swt

我使用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。它没有设置任何值,也没有给出任何错误消息。可以请任何人帮助我吗?

3 个答案:

答案 0 :(得分:7)

您有可能没有阅读Date.getYearDate.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