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]倒序输出,即为结果。