要求很简单,只想求一个当前最流行的版本。某一天 之后的20天。baseDate 某一天
amount 之后的n天
public static String getDayAfter(String baseDate, int amount) { return rsltDate; // 结果}
amount 之后的n天
public static String getDayAfter(String baseDate, int amount) { return rsltDate; // 结果}
然后构造Data,再format
没有最流行的,这个速度快而已
Date dt = null;
Date date = null;
try {
dt = new SimpleDateFormat("yyyyMMdd").parse(dateFrom);
long times = dt.getTime();
long dateMillSec = amount * 24 * 60 * 60 * 1000;
times = times + dateMillSec;
date = new Date(times);
} catch (ParseException e) {
return null;
}
return formatDate(date, "yyyyMMdd");
}
我最后搞成这个样子了。赫赫
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, amount);
return new SimpleDateFormat("yyyyMMdd").format(cal.getTime()).toString();
}这样写的不到我要的结果。
add方法有两个参数 add(int field, int amount)第一个参数应该放什么啊?
Date d = calendar.getTime();
String strDate = (new SimpleDateFormat("yyyy/MM/dd hh/mm/ss")).format(d);
System.out.println("strDate--->" + strDate);
最好改成
long dateMillSec = 24l * 60 * 60 * 1000 * amount;
否则会出现溢出的情况
为什么是 241 呢?
有难度的问题没人回答这是传说中的csdn吗?问题是简单的帖子知道结贴,难的帖子无人结贴
n.set(2006,00,01);
n.add(Calendar.DAY_OF_YEAR,20);
System.out.println(n.getTime().toString());这个不是可以吗!
Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year is JANUARY which is 0; the last depends on the number of months in a year.
*********************************************************************************
最后总结出两种方案方案1:
public static String getDayAfter(String dateFrom, int amount) {
Date dt = null;
Date date = null;
try {
dt = new SimpleDateFormat("yyyyMMdd").parse(dateFrom);
long times = dt.getTime();
long dateMillSec = 24l * 60 * 60 * 1000 * amount;
times = times + dateMillSec;
date = new Date(times);
} catch (ParseException e) {
return null;
}
return formatDate(date, "yyyyMMdd");
}
方案2
public static String getDayAfterUseCal(String dateFrom, int amount) {
Calendar cal = new GregorianCalendar();
cal.set(Integer.parseInt(dateFrom.substring(0, 4)), Integer.parseInt(dateFrom.substring(4,6)) - 1, Integer.parseInt(dateFrom.substring(6)));
cal.add(Calendar.DATE, amount);
return new SimpleDateFormat("yyyyMMdd").format(cal.getTime()).toString();
}
public static boolean checkYear(int year) {
if (year % 400 == 0 || (year % 4 == 0) && year % 100 != 0) {
return true;
} else {
return false;
}
}
public static int nextMonth(int[] date,boolean off) {
if(!off){
int tmp[]={date[0],date[1]};
date=tmp;
}
if(date[1]==12){
date[1]=1;
date[0]=date[0]+1;
}else{
date[1]=date[1]+1;
}
if(checkYear(date[0])&& date[1]==2){
return days[0];
}
System.out.println(date[1]) ;
return days[date[1]];
} //我的分数
static String getDayAfter(int date[], int afterNum) {
int maxDay = days[date[1]];
if (date[2] + afterNum <= maxDay) {
date[2] = date[2] + afterNum;
} else {
afterNum = afterNum - (maxDay - date[2]);
while (afterNum>nextMonth(date,false)) {
afterNum = afterNum - nextMonth(date,true);
}
nextMonth(date,true);
date[2]=afterNum;
}
return date[0]+"年"+date[1]+"月"+date[2]+"日";
} //测试代码
int[] a={1999,12,15};
System.out.print(getDayAfter(a,17)) ; 基本上所有面试的关于日期转换的题目都逃不出这些框框
lz多给点
Date trialTime = new Date();
calendar.setTime(trialTime);
public String getDayAfter20(){
int d=Calendar.DAY_OF_MONTH - 20;
calendar.set(Calendar.DAY_OF_MONTH,d);
return dateFormat(calendar.getTime());
}
gc.add(Calendar.DAY_OF_MONTH,amount);
rsltDate=formatter.format(cal.getTime()); return rsltDate; // 结果}