private static void function17() throws Exception {
Scanner sc=new Scanner(System.in)
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd")
System.out.println("请输入起始时间")
Date date1=sdf.parse(sc.next())
System.out.println("请输入截止时间")
Date date2=sdf.parse(sc.next())
long time1=date1.getTime()
long time2=date2.getTime()
long time=(time2-time1)/1000
long year=time/(24*3600*365)
long month=time%(24*3600*365)/(24*3600*30)
if(year>0){
System.out.println(year+"年"+month+"月")
}else{
System.out.println(month+"月")
}
}
你的问题其实跟日期没关系,你的问题其实可以描述为下面这样:long diff = 2160000000
int result = (int)(diff)/1000/60/60/24
System.out.println(result)
为什么经过计算后result结果为负数,原因是因为在java语言中int类型的取值范围是:-2147483648~2147483647,而你给的long型的diff超出了2147483647的最大值,导致最高位符号位变成了1,于是经过强制类型转换(int)(diff)之后,已经就是一个负数了,所以除法运算的结果也就成了负数。而当diff等于2073600000的时候,这个值并没有超出int类型的范围,所以计算出的结果是正数
import java.text.DateFormatimport java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Date
public class test {
public static void main(String args[]){
String ss="2016-01-01 00:00:00"
String sss="2016-01-02 00:00:00"
Date datass=null
Date datasss = null
try {
DateFormat df_parseDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
datass = (Date) df_parseDate.parse(ss)
datasss= (Date) df_parseDate.parse(sss)
System.out.println(datasss.getTime()-datass.getTime())//得到毫秒数
System.out.println((datasss.getTime()-datass.getTime())/(1000*60))//得到分钟数
} catch (ParseException e) {
e.printStackTrace()
}
}
}