-2

首先让我说我知道 Date() 已被弃用,我在这里查看了其他问题,每个人都这么说。

我正在做一个涉及使用 Java Swing 开发 GUI 的作业,GUI 的一部分是出生日期字段,其中三个 JComboBox 分别代表日、月和年。

我有代码从每三个中获取所选项目,然后确定日期:

Integer day = (Integer) dobDay.getSelectedItem();
Integer month = (Integer) dobMonth.getSelectedItem();
Integer year = (Integer) dobYear.getSelectedItem();

Date dob = new Date(day, month, year);

但是正确的日期不是输出的,我得到类似的东西

出生日期:1919 年 10 月 11 日星期六 00:00:00 GMT

如果我从组合框中选择 14、4 和 1900。

我不知道如何纠正这个问题,而且我很困惑,因为我有一个controllerConsole类来测试我的类和 Date() 工作的输入,

int dobD = 14;
int dobM = 4;
int dobY = 1990;

Employee e = new Employee("Gethin", 'M', new Date(dobD, dobM, dobY), "02",
    new Date(9, 9, 2011));

尽管 Date() 已被弃用,但从中我得到了我想要的输出:1990 年 4 月 14 日(我的 Date 类中有一个 monthAsString 构造函数,用于将月份编号转换为月份名称)。

我真的很感激这方面的任何帮助!由于 Date() 已被弃用,我已经看到提到的 Calendar 类作为对此的答案,但我的作业要求使用 Date() 类,我不确定如果我选择使用 Calendar 代替他们会怎么想.

4

4 回答 4

4
new Date(1990, 3, 14)

返回:

Sat Apr 14 00:00:00 CEST 1990

这是你所期望的。一切都在文档中进行了解释(注意参数和有效值的顺序):

公共日期(整数年,整数月,整数日期)

参数:

  • year - 减去 1900 的年份。
  • 月 - 0-11 之间的月份。
  • 日期 - 1-31 之间的月份中的日期。

顺便说一句:

首先让我说我知道 Date() 已被弃用

不,这不对。它的设计很糟糕(可变的,令人困惑toString()的,并不真正代表... date),但没有被弃用。只有您(错误地)使用的构造函数被弃用。

于 2013-01-26T18:03:32.493 回答
2

不要使用过时的方法。

它是Date(year, month, day),而不是相反。

除此之外,年份值会自动添加 1900(因此,要获得 1999,该year值必须为 99),然后您就得到了。

不要使用过时的方法。

于 2013-01-26T18:03:51.577 回答
1

Date 构造函数按此顺序期望年、月和日。你通过日、月和年。

于 2013-01-26T18:03:08.840 回答
0

如果您可以为月份提供字符串值,那么您可以使用 SimpleDateFormat 将字符串格式化为日期。使用串联,您可以获取格式为“2012 年 11 月 25 日”的日期。检查此链接以获取更多信息http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

于 2013-01-26T18:05:25.747 回答