在java中,如何在不从java API导入日期/日历的情况下向日期添加n天?

在java中,如何在不从java API导入日期/日历的情况下向日期添加n天?,java,class,date,Java,Class,Date,如何在Java中为一个日期添加n天来创建自己的Java类 例如,我的日期是2014年2月26日 再加上3天,输出应为2014年3月1日 不从JAVA API导入日历或日期 先谢谢你。任何示例代码、伪代码或想法都将受到高度重视将日期转换为天。例如,从01/01/1900经过多少天,然后添加3天并将其转换回。将日期转换为天。例如,从01/01/1900经过了多少天,然后添加3天并将其转换回去。试试这个 class Date { static int[] daysInMonth = { 31,

如何在Java中为一个日期添加n天来创建自己的Java类

例如,我的日期是2014年2月26日

再加上3天,输出应为
2014年3月1日

不从JAVA API导入日历或日期


先谢谢你。任何示例代码、伪代码或想法都将受到高度重视

将日期转换为天。例如,从
01/01/1900
经过多少天,然后添加3天并将其转换回。

将日期转换为天。例如,从
01/01/1900
经过了多少天,然后添加3天并将其转换回去。

试试这个

class Date {
    static int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int m;
    int d;
    int y;

    Date(String date) {
        // parse and get int fields
    }

    Date(int d, int m, int y) {
        this.d = d;
        this.m = m;
        this.y = y;
    }

    int maxDays() {
        int md = daysInMonth[m - 1];
        // correction for Feb
        return md;
    }

    Date addDays(int n) {
        int d = this.d += n;
        int m = this.m;
        int y = this.y;
        while (d > maxDays()) {
            d = d - maxDays();
            m++;
            if (m > 12) {
                y++;
                m = 1;
            }
        }
        return new Date(d, m, y);
    }
}
请注意,代码可能需要修复

请尝试以下操作

class Date {
    static int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int m;
    int d;
    int y;

    Date(String date) {
        // parse and get int fields
    }

    Date(int d, int m, int y) {
        this.d = d;
        this.m = m;
        this.y = y;
    }

    int maxDays() {
        int md = daysInMonth[m - 1];
        // correction for Feb
        return md;
    }

    Date addDays(int n) {
        int d = this.d += n;
        int m = this.m;
        int y = this.y;
        while (d > maxDays()) {
            d = d - maxDays();
            m++;
            if (m > 12) {
                y++;
                m = 1;
            }
        }
        return new Date(d, m, y);
    }
}

请注意,代码可能需要修改

这是我的面试问题之一,我在纸上返回了以下代码可能是我的运气不好:-(我没有在那轮中被选中,可能是面试官无法理解:-):-)。 我只是想看看有没有更好的方法,但我没有,所以我写了和我在纸上写的一样的代码,但它工作起来很有魅力。完全希望我的信心保持不变

希望这对你或其他人有帮助

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

public class MyDate
{
    private static final Map<Integer, Integer>  daysInMonth;

    static
    {
        daysInMonth = new HashMap<Integer, Integer>();
        daysInMonth.put(1, 31);
        daysInMonth.put(2, 28);
        daysInMonth.put(3, 31);
        daysInMonth.put(4, 30);
        daysInMonth.put(5, 31);
        daysInMonth.put(6, 30);
        daysInMonth.put(7, 31);
        daysInMonth.put(8, 31);
        daysInMonth.put(9, 30);
        daysInMonth.put(10, 31);
        daysInMonth.put(11, 30);
        daysInMonth.put(12, 31);
    }

    private int                                 day;
    private int                                 month;
    private int                                 year;
    private int                                 amount;

    public MyDate(int day, int month, int year)
    {
        this.day = day;
        this.month = month;
        this.year = year;
    }

    public MyDate addOrSubDays(int amount)
    {
        this.amount = amount;
        return addOrSubDays(this.day + this.amount, this.month, this.year);
    }

    public static void main(String[] args)
    {
        int amount = 650;

        MyDate myDate = new MyDate(21, 5, 2016);
        MyDate addOrSubDays = myDate.addOrSubDays(amount);

        System.out.println(addOrSubDays.getDay() + "-" + addOrSubDays.getMonth() + "-" + addOrSubDays.getYear());

        // Testing
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, amount);
        System.out.println(cal.getTime());
    }

    private MyDate addOrSubDays(int days, int month, int year)
    {
        if (days > 0 && days <= getNoOfDaysInMonth(month, year))
        {
            return new MyDate(days, month, year);
        }
        else if (days <= 0)
        {
            month = month - 1;
            if (month == 0)
            {
                month = 12;
                year = year - 1;
            }
            days = getNoOfDaysInMonth(month, year) + days;
        }
        else
        {
            month = month + 1;
            if (month > 12)
            {
                month = 1;
                year = year + 1;
            }
            days = days - getNoOfDaysInMonth(month, year);
        }
        return addOrSubDays(days, month, year);
    }

    private int getNoOfDaysInMonth(int month, int year)
    {
        if (month == 2 && checkIsLeepYear(year))
        {
            return daysInMonth.get(month) + 1;
        }
        return daysInMonth.get(month);
    }

    private boolean checkIsLeepYear(int year)
    {
        if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
        {
            return true;
        }
        return false;
    }

    public int getDay()
    {
        return day;
    }

    public int getMonth()
    {
        return month;
    }

    public int getYear()
    {
        return year;
    }

    public int getAmount()
    {
        return amount;
    }
}
import java.util.Calendar;
导入java.util.HashMap;
导入java.util.Map;
公共类MyDate
{
私有静态最终地图daysInMonth;
静止的
{
daysInMonth=newhashmap();
每月1日,31日;
每月的第2天,第28天;
每月的第3天,第31天;
日/月。投入(4,30);
日/月。投入(5,31);
每月的第6天,第30天;
每月7日,31日;
每月的第8天,第31天;
每月的第9天,第30天;
年月日。卖出价(10,31);
每月11日,30日;
每月的日数。卖出价(12,31);
}
私人国际日;
私人整数月;
私人国际年;
私人整数金额;
公共MyDate(整数天、整数月、整数年)
{
this.day=天;
本月=月;
今年=年;
}
公共MyDate地址子天数(整数金额)
{
这个。金额=金额;
返回addOrSubDays(this.day+this.amount,this.month,this.year);
}
公共静态void main(字符串[]args)
{
整数金额=650;
MyDate MyDate=新的MyDate(2016年5月21日);
MyDate addOrSubDays=MyDate.addOrSubDays(金额);
System.out.println(addOrSubDays.getDay()+“-”+addOrSubDays.getMonth()+“-”+addOrSubDays.getYear());
//测试
Calendar cal=Calendar.getInstance();
计算添加(日历日/月/日,金额);
System.out.println(cal.getTime());
}
私有MyDate地址子天数(整数天、整数月、整数年)
{

如果(天>0&&days这是我的面试问题之一,我必须在纸上返回以下代码可能是我的运气不好:-(我没有在那轮中被选中,可能是面试官无法理解:-):-)。 我只是想看看有没有更好的方法,但我没有,所以我写了和我在纸上写的一样的代码,但它工作起来很有魅力。希望我的信心保持不变:-):-)

希望这对你或其他人有帮助

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

public class MyDate
{
    private static final Map<Integer, Integer>  daysInMonth;

    static
    {
        daysInMonth = new HashMap<Integer, Integer>();
        daysInMonth.put(1, 31);
        daysInMonth.put(2, 28);
        daysInMonth.put(3, 31);
        daysInMonth.put(4, 30);
        daysInMonth.put(5, 31);
        daysInMonth.put(6, 30);
        daysInMonth.put(7, 31);
        daysInMonth.put(8, 31);
        daysInMonth.put(9, 30);
        daysInMonth.put(10, 31);
        daysInMonth.put(11, 30);
        daysInMonth.put(12, 31);
    }

    private int                                 day;
    private int                                 month;
    private int                                 year;
    private int                                 amount;

    public MyDate(int day, int month, int year)
    {
        this.day = day;
        this.month = month;
        this.year = year;
    }

    public MyDate addOrSubDays(int amount)
    {
        this.amount = amount;
        return addOrSubDays(this.day + this.amount, this.month, this.year);
    }

    public static void main(String[] args)
    {
        int amount = 650;

        MyDate myDate = new MyDate(21, 5, 2016);
        MyDate addOrSubDays = myDate.addOrSubDays(amount);

        System.out.println(addOrSubDays.getDay() + "-" + addOrSubDays.getMonth() + "-" + addOrSubDays.getYear());

        // Testing
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, amount);
        System.out.println(cal.getTime());
    }

    private MyDate addOrSubDays(int days, int month, int year)
    {
        if (days > 0 && days <= getNoOfDaysInMonth(month, year))
        {
            return new MyDate(days, month, year);
        }
        else if (days <= 0)
        {
            month = month - 1;
            if (month == 0)
            {
                month = 12;
                year = year - 1;
            }
            days = getNoOfDaysInMonth(month, year) + days;
        }
        else
        {
            month = month + 1;
            if (month > 12)
            {
                month = 1;
                year = year + 1;
            }
            days = days - getNoOfDaysInMonth(month, year);
        }
        return addOrSubDays(days, month, year);
    }

    private int getNoOfDaysInMonth(int month, int year)
    {
        if (month == 2 && checkIsLeepYear(year))
        {
            return daysInMonth.get(month) + 1;
        }
        return daysInMonth.get(month);
    }

    private boolean checkIsLeepYear(int year)
    {
        if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
        {
            return true;
        }
        return false;
    }

    public int getDay()
    {
        return day;
    }

    public int getMonth()
    {
        return month;
    }

    public int getYear()
    {
        return year;
    }

    public int getAmount()
    {
        return amount;
    }
}
import java.util.Calendar;
导入java.util.HashMap;
导入java.util.Map;
公共类MyDate
{
私有静态最终地图daysInMonth;
静止的
{
daysInMonth=newhashmap();
每月1日,31日;
每月的第2天,第28天;
每月的第3天,第31天;
日/月。投入(4,30);
日/月。投入(5,31);
每月的第6天,第30天;
每月7日,31日;
每月的第8天,第31天;
每月的第9天,第30天;
年月日。卖出价(10,31);
每月11日,30日;
每月的日数。卖出价(12,31);
}
私人国际日;
私人整数月;
私人国际年;
私人整数金额;
公共MyDate(整数天、整数月、整数年)
{
this.day=天;
本月=月;
今年=年;
}
公共MyDate地址子天数(整数金额)
{
这个。金额=金额;
返回addOrSubDays(this.day+this.amount,this.month,this.year);
}
公共静态void main(字符串[]args)
{
整数金额=650;
MyDate MyDate=新的MyDate(2016年5月21日);
MyDate addOrSubDays=MyDate.addOrSubDays(金额);
System.out.println(addOrSubDays.getDay()+“-”+addOrSubDays.getMonth()+“-”+addOrSubDays.getYear());
//测试
Calendar cal=Calendar.getInstance();
计算添加(日历日/月/日,金额);
System.out.println(cal.getTime());
}
私有MyDate地址子天数(整数天、整数月、整数年)
{

如果(天>0&&days因为每个人都把他们的日期类放在这里,我会发布我的

这是测试结果

Jun 12, 2014 + 10 days -> Jun 22, 2014
Jun 12, 2014 + 20 days -> Jul 2, 2014
Dec 15, 2014 + 20 days -> Jan 4, 2015
Dec 15, 1955 + 30 days -> Jan 14, 1956
Dec 15, 1955 - 30 days -> Nov 15, 1955
Dec 15, 1955 + 16 days -> Dec 31, 1955
Dec 15, 1955 + 17 days -> Jan 1, 1956
Dec 15, 1955 + 80 days -> Mar 4, 1956
Dec 15, 1956 + 80 days -> Mar 5, 1957
Mar 5, 1957 - 80 days -> Dec 15, 1956
Mar 5, 1956 - 80 days -> Dec 16, 1955
代码如下。我将日期格式化为月、日、年格式。您可以将getFormattedOutput方法更改为日、月、年格式

package com.ggl.testing;

import java.security.InvalidParameterException;

public class Date {

    private static final boolean DEBUG = false;

    private static final int BASE_MONTH = 1;
    private static final int BASE_YEAR = 1700;

    private int days;

    public Date(int month, int day, int year) {
        setDate(month, day, year);
    }

    public void setDate(int month, int day, int year) {
        if ((month >= 1) && (month <= 12)) {
        } else {
            String s = "Month not between 1 and 12";
            throw new InvalidParameterException(s);
        }

        if (year >= BASE_YEAR) {
            int temp = calculateMonthDays(month, year);
            if ((day >= 1) && (day <= temp)) {
            } else {
                String s = "Day not between 1 and " + temp;
                throw new InvalidParameterException(s);
            }

            int days = calculateYearDays(year);
            if (DEBUG) {
                System.out.println(days);
                System.out.println(temp);
            }

            days += temp;
            this.days = days + day;
            if (DEBUG) {
                System.out.println(day);
                System.out.println(this.days);
            }
        } else {
            String s = "Year before " + BASE_YEAR;
            throw new InvalidParameterException(s);
        }
    }

    public int[] getDate() {
        int days = this.days;
        if (DEBUG)
            System.out.println(days);

        int year = BASE_YEAR;
        int decrement = daysInYear(year);
        while (days > decrement) {
            days -= decrement;
            decrement = daysInYear(++year);
        }
        if (DEBUG)
            System.out.println(days);

        int month = BASE_MONTH;
        decrement = daysInMonth(month, year);
        while (days > decrement) {
            days -= decrement;
            decrement = daysInMonth(++month, year);
        }
        if (DEBUG)
            System.out.println(days);

        int day = days;

        int[] result = new int[3];
        result[0] = month;
        result[1] = day;
        result[2] = year;

        return result;
    }

    public String getFormattedDate() {
        String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
                "Aug", "Sep", "Oct", "Nov", "Dec" };
        int[] fields = getDate();
        return String.format("%s %d, %d", months[fields[0] - 1], fields[1],
                fields[2]);
    }

    public void addDays(int increment) {
        this.days += increment;
    }

    private int calculateMonthDays(int month, int year) {
        int days = 0;

        for (int i = BASE_MONTH; i < month; i++) {
            days += daysInMonth(i, year);
        }

        return days;
    }

    private int calculateYearDays(int year) {
        int days = 0;

        for (int i = BASE_YEAR; i < year; i++) {
            days += daysInYear(i);
        }

        return days;
    }

    private int daysInMonth(int month, int year) {
        int[] days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        if (month == 2) {
            if (daysInYear(year) > 365) {
                return days[month - 1] + 1;
            }
        }

        return days[month - 1];
    }

    private int daysInYear(int year) {
        int days = 365;

        if ((year % 4) == 0) {
            if ((year % 100) == 0) {
                if ((year % 400) == 0) {
                    days++;
                }
            } else {
                days++;
            }
        }

        return days;
    }

    public static void main(String[] args) {
        Date date = new Date(6, 12, 2014);
        displayResult(date, 10);

        date = new Date(6, 12, 2014);
        displayResult(date, 20);

        date = new Date(12, 15, 2014);
        displayResult(date, 20);

        date = new Date(12, 15, 1955);
        displayResult(date, 30);

        date = new Date(12, 15, 1955);
        displayResult(date, -30);

        date = new Date(12, 15, 1955);
        displayResult(date, 16);

        date = new Date(12, 15, 1955);
        displayResult(date, 17);

        date = new Date(12, 15, 1955);
        displayResult(date, 80);

        date = new Date(12, 15, 1956);
        displayResult(date, 80);

        date = new Date(3, 5, 1957);
        displayResult(date, -80);

        date = new Date(3, 5, 1956);
        displayResult(date, -80);
    }

    private static void displayResult(Date date, int increment) {
        String sign = "";
        int display = 0;

        if (increment > 0) {
            sign = " + ";
            display = increment;
        } else {
            sign = " - ";
            display = -increment;
        }

        System.out
                .print(date.getFormattedDate() + sign + display + " days -> ");
        date.addDays(increment);
        System.out.println(date.getFormattedDate());
    }

}
package com.ggl.testing;
导入java.security.InvalidParameterException;
公课日期{
私有静态最终布尔调试=false;
私有静态最终整数基数_月=1;
私人静态最终整数基数=1700;
私人国际日;
公开日期(整数月、整数日、整数年){
设置日期(月、日、年);
}
公共无效设置日期(整数月、整数日、整数年){
如果((月>=1)和&(月=基准年){
int temp=计算月数(月、年);
如果((日>=1)和&(日减量){
天数-=减量;
减量=年天数(++年);
}
如果(调试)
系统输出打印项次(天);
整月
package StringProgram;

public class AddingDaystoDate {

    public static String addDays(String date, int n)
    {
        int[] daysInNormalYear={31,28,31,30,31,30,31,31,30,31,30,31};
        int[] daysInLeapYear={31,29,31,30,31,30,31,31,30,31,30,31};
        String[] sArray=date.split("/");
        int dd=Integer.valueOf(sArray[0]);
        int mm=Integer.valueOf(sArray[1]);
        int yy=Integer.valueOf(sArray[2]);
        String updatedDate="";

        if(calculateLeapYear(yy)==true)
        {
            int maxDayinMonth=daysInLeapYear[mm-1];
            dd=dd+n;
            if(dd>maxDayinMonth)
            {
                dd=dd-maxDayinMonth;
                mm++;
                if(mm>12)
                {
                    yy++;
                    mm=1;
                }

            }

            updatedDate=new String(""+dd+"/"+mm+"/"+yy);
        }
        else
        {
            int maxDayinMonth=daysInNormalYear[mm-1];
            dd=dd+n;
            if(dd>maxDayinMonth)
            {
                dd=dd-maxDayinMonth;
                mm++;
                if(mm>12)
                {
                    yy++;
                    mm=1;
                }

            }

            updatedDate=new String(""+dd+"/"+mm+"/"+yy);
        }
        return updatedDate;
    }
    public static boolean calculateLeapYear(int year)
    {
        if(year%4==0)
        {
            if(year%100==0)
            {
                if(year%400==0)
                {
                    return true;
                }
            }
            return false;
        }
        return false;
    }

    public static void main(String[] args) {
        String date="27/12/2014";

        String s=addDays(date,5);

        System.out.print(s);



    }

}
    public Date1(int d, int m, int y) {

        this.day = d;
        this.month = m;
        this.year = y;
    }



  public void addDay() {
    month--;
    Calendar m = Calendar.getInstance();
    m.set(year, month, day);
    m.add(day, 5); // if you want add or sub month or year it depend on days 

    java.sql.Date d = new java.sql.Date(m.getTimeInMillis());
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    System.out.println(" date is  " + df.format(d));