java相减问题

Python015

java相减问题,第1张

import java.text.ParseException

import java.text.SimpleDateFormat

import java.util.Date

class Test2 {

public static String getDate(){

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd")

Date dd = new Date()

return ft.format(dd)

}

public static long getQuot(String time1, String time2){

long quot = 0

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd")

try {

Date date1 = ft.parse( time1 )

Date date2 = ft.parse( time2 )

quot = date1.getTime() - date2.getTime()

quot = quot / 1000 / 60 / 60 / 24

} catch (ParseException e) {

e.printStackTrace()

}

return quot

}

public static void main(String[] args) throws Exception {

String date1 = "2008-10-10"

String date2 = getDate()

long day = getQuot(date1,date2)

System.out.println( "距离 "+date1+" 还有 "+day+" 天" )

}

}

你看一下这段代码,是从今天到2008-10-10的天数。

Date的getTime()方法返回自1970年1月1日午夜(通用时间)以来的毫秒数。

用22008-10-10的getTime()减去今天的getTime()就是这两天相差的毫秒数,1秒=1000毫秒,1分钟=60秒,1小时=60分钟,1天=24小时,然后除除除就得到天数了。

先转成Date 再获取毫秒数来减

java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

java.util.Calendar c = Calendar.getInstance()

String date1 = "2014-10-10 00:00:00"

String date2 = "2015-10-10 00:00:00"

c.setTime(sdf.parse(date1))

int y1 = c.get(Calendar.YEAR)

int m1 = c.get(Calendar.MONTH)

c.setTime(sdf.parse(date2))

int y2 = c.get(Calendar.YEAR)

int m2 = c.get(Calendar.MONTH)

int y = Math.abs(y2 - y1)

int m = y * 12 + Math.abs(m1-m2)

long d1 = sdf.parse(date1).getTime()

long d2 = sdf.parse(date2).getTime()

int d = (int) (Math.abs(d2-d1) / (1000 * 60 * 60 * 24))

System.out.println("相差年: " + y)

System.out.println("相差月: " + m)

System.out.println("相差天: " + d)

既然是“大数”,那就可能出现BigInteger长度不够的情况,所以不能直接使用楼上的方法。

关于“大数”的定义,需要楼主提供问题细节:

1.被减数、减数是否会出现负数

2.结果是否会出现负数

负数情况可先转化为绝对值的加减,然后根据大小关系为结果添加正负号解决。所以,暂时先讨论最简单、最基本的情况即 a,b都为正整数,且a>b的情况

1.建议把两个数组改成倒序排列 这样相减时可以由a[0]和b[0]开始,即int[] a = { 7, 0, 1, 8, 5, 3, 7 } int[] b = { 2, 4, 7, 4, 5}

2.遍历两个数组a和b,a[i]-b[i],够减则直接把结果存入a[i],不够减则a[i]+10-b[i]存入a[i],并且a[i+1]=a[i+1]-1,(这里如果不够减,再借位a[i+1]=a[i+1]+10-1a[i+2]=a[i+2]-1,以此类推,可用递归实现)遍历至b.length结束,然后再将a[i]倒序输出,即为结果。