需要 Java 中的 SWT DateTime 帮助

问题描述 投票:0回答:4

我使用

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
。它没有设置任何值,也没有给出任何错误消息。有人可以帮我解决这个问题吗?

java datetime swt
4个回答
7
投票

您可能还没有阅读过

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。目前尚不清楚是否值得您在这里使用它(如果这是您必须做的全部),但如果您正在做任何根本重要的事情(包括解析、格式化或任何类型的算术),您应该使用它它。


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);

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


0
投票

java.time

在现代 Java 中,使用 java.time 类。切勿使用有严重缺陷的遗留版本,例如

Date
Calendar
SimpleDateFormat

java.time.LocalDate

对于仅日期值,没有时间、时区或偏移量,请使用 Java 类

LocalDate
。在 SQL 中,将列定义为类似于 SQL 标准类型的数据类型
DATE

检索:

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

写作:

myPreparedStatement.setObject( … , ld ) ;
© www.soinside.com 2019 - 2024. All rights reserved.