Java:如何创建适用于我的日期类的方法

时间:2016-04-20 18:25:51

标签: java date

我有一个日期类,它有以下

public class Date {
    public int month;
    public int day;
    public int year;

    public Date(int m, int d, int y)
    {
        month = m;
        day = d;
        year = y;
    }
    public Date increase(int numberOfDays)
    {
        day += numberOfDays;
        return this;
    }

我的问题是,对于给定的Date实例,增加天数的最简单方法是什么?例如,我创建了一个新Date(4,20,2016).increase(30)的实例;这将增加给定日期添加30天。那将是5月19日的某个时候。如果它小于该月的最大日期,则上述方法应该有效。但我还没弄清楚如何进行计算,包括月份和年份。就像我添加365天到那个日期将是2017年4月20日。只是一个想法会有所帮助。感谢

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

Date date = new Date(); 
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 30); // add 30 days
date = cal.getTime();

使用jcalendar,你可以添加日期试试这个例子

答案 2 :(得分:1)

自己实现这个任务非常棘手。更重要的是,因为您将Date存储为单独的monthyearday。您必须存储有关每月天数的信息,以及有关闰年的信息。简而言之,尝试重新实施Date并不容易。

存储"日,月,年的一种解决方案" Java 8出现之前的日期是使用Joda。使用Joda的LocalDate课程,您可以:

LocalDate date = LocalDate.now();
date = date.plusDays(30);

此功能现在可在Java 8的java.time包中使用,使用相同的LocalDate类名。看一下这两个软件包的源代码,看看它是如何实现的。

简而言之,LocalDate.plusDays()首先转换"月,日,年"使用大约20行长的算法,将日期记录到" epoch"以来的单个天数。然后,它会将请求的天数添加到该数字。最后,它将该数字转换回"日,月,年"使用另一种算法甚至更长。