时间计算问题:根据已知的一个时间比如2005-2005-02-12计算15天前的时间是什么时候?

liutang2 2005-09-19 08:56:58
根据已知的一个时间比如2005-2005-02-12计算15天前的时间是什么时候?
我写的方法是:
public String cauDate(){
String startDate="";
try{
String lastDate="2005-02-12";
int dayNum=5;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date1= formatter.parse(lastDate);
long subDay=(60*60*24*1000);
subDay=subDay*dayNum;
date1.setTime(date1.getTime()-subDay);
String mDate=formatter.format(date1);
startDate=mDate;
System.out.println(mDate);
}catch(Exception e){
e.printStackTrace();
}
return startDate;
}

如果计算的是12天以内时间就没问题
如果计算超12天的时间就不对,请问如何解决?
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjyh 2005-09-20
  • 打赏
  • 举报
回复
Date aa=new Date();
long ll=aa.getTime();
int bb=100; // 相差的天数
Date rs=new Date(ll-bb*24*60*60*1000);
System.out.println(rs);
不行吗?
David702A 2005-09-20
  • 打赏
  • 举报
回复
GregorianCalendar m_today = new GregorianCalendar(2005,01,12);
m_today.add(Calendar.DATE , -12);
System.out.println(m_today.get(Calendar.DAY_OF_YEAR) +" "+m_today.get(Calendar.MONTH ) +" "+m_today.get(Calendar.YEAR ));
liutang2 2005-09-20
  • 打赏
  • 举报
回复
我解决了:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

String ss="1970-01-01";
Date date2=formatter.parse(ss);
long orgNum=date2.getTime();

原因是orgNum根本不等于零;
完整的程序是这样的:

public String cauDate() {
String startDate = "";
try {
String lastDate = "2005-02-12";

// java.text.SimpleDateFormat f=new SimpleDateFormat();
int dayNum = 2;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date1 = formatter.parse(lastDate);
long subDay = (60 * 60 * 24 * 1000);
subDay = subDay * dayNum;

String ss="1970-01-01";
Date date2=formatter.parse(ss);
long orgNum=date2.getTime();
// date1.
date1.setTime(date1.getTime() - subDay-orgNum);
String mDate = formatter.format(date1);
startDate = mDate;
System.out.println(mDate);
} catch (Exception e) {
e.printStackTrace();
}
return startDate;
}

谢谢楼上的同志
ChDw 2005-09-20
  • 打赏
  • 举报
回复
主要是subDay的类型不对

long subDay=(60l*60*24*1000);

你在第一个60后面需要加一个l才表示是进行long类型运算,否则JVM会作int运算以致超过整数范围
liutang2 2005-09-20
  • 打赏
  • 举报
回复
我的那个方法我知道错误在
date1.setTime(date1.getTime()-subDay);

但是还没找到解决办法。
liutang2 2005-09-20
  • 打赏
  • 举报
回复
多谢楼上二位
但是问题还是没解决
楼上的程序在运行:System.out.println(t.conversion("2005-3-12",-12));
算出的时间不对。

我写的那个方法跨月计算就不对,时间相减后不跨月是可以的。

希望热心人继续指点
wizardblue 2005-09-19
  • 打赏
  • 举报
回复
import java.util.Calendar;

public class CalcDate {
public static String conversion(String originDate,int offset){

Calendar calendar = Calendar.getInstance() ;
int year;
int month;
int day;
int firstDash;
int secondDash;

if (originDate == null) throw new java.lang.IllegalArgumentException();

firstDash = originDate.indexOf('-');
secondDash = originDate.indexOf('-', firstDash+1);
if ((firstDash > 0) & (secondDash > 0) & (secondDash < originDate.length()-1)) {
year = Integer.parseInt(originDate.substring(0, firstDash)) - 1900;
month = Integer.parseInt(originDate.substring(firstDash+1, secondDash)) - 1;
day = Integer.parseInt(originDate.substring(secondDash+1));
} else {
throw new java.lang.IllegalArgumentException();
}
calendar.set(year,month,day);
calendar.add(Calendar.DAY_OF_MONTH,offset);
return (calendar.get(Calendar.YEAR )+1900+"-"+calendar.get(Calendar.MONTH)+1+"-"+calendar.get(Calendar.DAY_OF_MONTH));

}
public static void main(String[] args) {
System.out.println(CalcDate.conversion( "2005-2-12",-15));
}
}
doway 2005-09-19
  • 打赏
  • 举报
回复
看上去没问题,楼主为什么认为“计算超12天的时间就不对”?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧