在java中,如何在不从java API导入日期/日历的情况下向日期添加n天?
如何在Java中为一个日期添加n天来创建自己的Java类 例如,我的日期是2014年2月26日 再加上3天,输出应为在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,
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));