这可能是java里面的一个错误,你的程序本身没有错。除了你所说的,如果你取的是月份,也会出现相同的问题。你还必须确保你电脑上的日期是正确的,既然是差一个星期,你在后面加一个1就可以了。
设置系统的Local,它默认的是格林威治时间
现在机器没装ide,没法测试你的代码,不过我看你设的变量有些问题,在java中是按西方习惯每个星期的第一天是星期日,也就是说星期日是变量0,星期一是1,以此类推,你可以看一下是不是这个问题造成的时间差异。
import java.util.*;
import javax.swing.JOptionPane;
public class test
{
public static void main(String args[ ])
{
String str=JOptionPane.showInputDialog("输入第一个日期的年份:");
int yearOne=Integer.parseInt(str);
str=JOptionPane.showInputDialog("输入该年的月份:");
int monthOne=Integer.parseInt(str);
str=JOptionPane.showInputDialog("输入该月份的日期:");
int dayOne=Integer.parseInt(str);
str=JOptionPane.showInputDialog("输入第二个日期的年份:");
int yearTwo=Integer.parseInt(str);
str=JOptionPane.showInputDialog("输入该年的月份:");
int monthTwo=Integer.parseInt(str);
str=JOptionPane.showInputDialog("输入该月份的日期:");
int dayTwo=Integer.parseInt(str);
Calendar calendar=Calendar.getInstance(); //初始化日历对象
calendar.set(yearOne, monthOne, dayOne); //将calendar的时间设置为yearOne年monthOne月dayOne日
long timeOne= calendar.getTimeInMillis() ; //calendar表示的时间转换成毫秒
System.out.println(timeOne);
calendar.set(yearTwo, monthTwo, dayTwo); //将calendar的时间设置为yearTwo年monthTwo月dayTwo日
long timeTwo= calendar.getTimeInMillis(); //calendar表示的时间转换成毫秒。
Date date1=new Date(timeOne); // 用timeOne做参数构造date1
Date date2=new Date(timeTwo); // 用timeTwo做参数构造date2
if(date2.equals(date1))
{
System.out.println("两个日期的年、月、日完全相同");
}
else if(date2.after(date1))
{
System.out.println("您输入的第二个日期大于第一个日期");
}
else if(date2.before(date1))
{
System.out.println("您输入的第二个日期小于第一个日期");
}
long days=Math.abs((timeOne-timeTwo)/1000/60/60/24);;//计算两个日期相隔天数
System.out.println(yearOne+"年"+monthOne+"月"+dayOne+"日和"
+yearTwo+"年"+monthTwo+"月"+dayTwo+"相隔"+days+"天");
}
}