java实现两个时间相减得到年月

Python014

java实现两个时间相减得到年月,第1张

大概判断了一下,比较粗糙,仅供参考。

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.DateFormat

import 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()

}

}

}