2

为什么 Java 使如何从 Date 对象中获取月份中的哪一天变得不明显?

.getDay()已弃用,建议使用Calendar.get(Calendar.MONTH)

这对我来说毫无意义,我很好奇这种弃用背后的理由是什么。

我有一个 Date 对象,我只想要这一天。这是有史以来最自然的事情,我无法调用它。这种设计是错误的,因此我的代码没有按应有的方式工作:

private String getIngivningsDag() {

    return ""+ingivningsDatum.getDate();
}



private String getIngivningsMonth() {

    return ""+ingivningsDatum.getmonth();
}

private String getIngivningsYear() {

    return ""+ingivningsDatum.getYear();
}

更新

这是“解决方案”:

public String getIngivningsDag() {

    Calendar cal = Calendar.getInstance();
    cal.setTime(ingivningsDatum);
    return cal.get(Calendar.DAY_OF_WEEK_IN_MONTH)+"";
}

没有 Java 的设计错误并使用方法参数而不是奇怪的 Class 方法和工厂,它应该看起来简单而良好:

public String getIngivningsDag() {

    return ingivningsDatum.getDay(Calendar.GREGORIAN, "SE");
}
4

6 回答 6

4

Date意味着一个时刻,但确切的日/月/时间/等在不同的日历和时区中是不同的。因此,要知道特定时间戳是哪一天,您应该使用Calendar Timezoneand DateFormat。例如 jdk 至少有两个日历实现 - BuddistCalendar 和 GregorianCalendar。默认日历取决于用户的偏好。

另外,请查看 Jodatime 库 - 它具有更多功能,并且在 Java 中管理日期更有意义。

于 2012-10-22T12:45:54.793 回答
3

不仅是那个方法,Date类的大部分方法和一些构造函数现在都被弃用了。您必须使用Calendar类来获取DAY,或MONTH从您的 Date 对象中获取。

但是,我建议你尝试一下Joda-Time API,这会让你更快乐,因为,当涉及到索引时,甚至Calendar类也是一个,从它开始。bit inconsistentMONTH0

但是,对于您当前的问题,您可以使用以下方法将Date对象转换为Calendar实例:-

Calendar cal = Calendar.getInstance();
cal.setTime(date);

System.out.println(cal.get(Calendar.MONTH));
于 2012-10-22T12:47:52.577 回答
2

文档

在 JDK 1.1 之前,Date 类有两个附加功能。它允许将日期解释为年、月、日、小时、分钟和秒值。它还允许格式化和解析日期字符串。不幸的是,这些函数的 API不适合国际化。从 JDK 1.1 开始,应使用 Calendar 类在日期和时间字段之间进行转换,并且应使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已弃用。

还要考虑日期的定义

Date 类表示特定的时间瞬间,精度为毫秒。

向其添加日历功能可以说违反了单一职责原则。

于 2012-10-22T12:46:00.183 回答
1

java.Date 仅用于存储自 1970 年 1 月 1 日以来的毫秒数。如果你想拥有像 getDay() 或 dayOfWeek() 这样的日历功能,你必须使用 Calendar 类。

于 2012-10-22T12:46:03.330 回答
1

最简单的解决方案不是找出完成的原因,而是使用Joda-Time

于 2012-10-22T12:47:16.300 回答
1

首先,生气说设计是错误的并没有任何帮助。

第二,Calendar.getDay(Calendar.MONTH)不是静态方法。要访问您的化合物,Date请通过三个步骤使用Calendar类:

  1. 通过调用创建Calendar实例Calendar cal = Calendar.getInstance()
  2. 通过调用将您的日期设置为Calendar实例Calendar.setTime(date)
  3. 通过调用获得月份cal.get(Calendar.MONTH)
于 2012-10-22T12:49:40.990 回答