我可以创建年份不适用的日期对象吗?

时间:2011-01-04 17:23:23

标签: java

我正在尝试创建一个没有年份的日期对象,因为它不适用(它代表一年中的某个时间而不是特定的年份)。

我想尽可能使用实际的Date类,因为我的框架有一个自动HTTP绑定。

没有构造函数可以执行此操作。

6 个答案:

答案 0 :(得分:3)

目前尚不清楚“自动HTTP绑定”的含义 - 在什么情况下?这个价值如何传达?

您可以使用任意年份创建Date - 例如,2012年会很好,因为这将支持2月29日。但是,无论使用,另一端的数据都需要知道忽略年份部分。 (当然,您应该首先使用Calendar来创建年份,因为Date构造函数已经过去了年/月/日等。

无论你做什么,Date都代表了一个时刻 - 没有一年的Date没有概念,只有没有一小时的Date。这是一瞬间,就是这样。它没有关联的时区,日历或格式字符串,或者哪些位有用的任何概念。使用它的代码需要处理它。

我个人建议使用Joda Time来处理Java中的所有日期/时间。它实际上并没有我所能看到的MonthDay类型(这是你想要的),但你可以使用LocalDate并忽略年份。或者你可以自己实现ReadablePartial,但那会更有效:)

答案 1 :(得分:3)

您还可以使用一个构造函数扩展Date类,其中包含monthday的两个参数,您可以像使用Date一样使用它你的框架。

以下示例将为您提供2012年的Date,其中包括2月29日:

public class MyDate extends Date {
    static private final long START = 1325286000000L; // Dec 31st, 2011
    static private final long ONE_DAY = 24 * 60 * 60 * 1000;
    static private final int[] DAYS = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};

    public MyDate(int month, int day) {
        super(START + (DAYS[month - 1] + day) * ONE_DAY);
    }
}

答案 2 :(得分:1)

在这种情况下,您可以忽略年份字段。因为你只想使用Date,默认情况下如果你没有; t覆盖它会保留当前年份

答案 3 :(得分:1)

假设您真的不关心任何日期逻辑或验证,请执行以下操作:

public class YearlessDate{
    private int month;
    private int day;
}

答案 4 :(得分:1)

有些库可以实现部分日期,它们可以完全按照您的意愿行事。例如,joda的Partial

答案 5 :(得分:1)