Android中时间计算问题

前言

实在想吐槽以下Android上的时间计算,使用Java/Kotlin都一样,并没有提供强大的时间计算上的支持,作为忠实的C#的爱好者实在受不了如此”简约”的语言。不再吐槽了下边是一种相对简单的计算方式,没什么难的,不用刻意记(因为刻意,记不住),理解就行了。

时间计算

说到时间计算无非常用的就是两种,第一种就是仅仅获得时间差的某个时间维度的总值,比如说等,第二种就是获取的精确的时间差,就是说两个时间相减得到剩余的年月日时分秒

第一种

这一种相对简单而且容易理解,首先我们分别通过两个timeInMillis取差值,获取到的就是时间差(毫秒单位)。紧接着就是获取这个时间差种有几个,一天是24小时,一小时是60分钟,一分钟是60秒,一秒是1000毫秒,那么一天=1000*60*60*24,第一个1000乘以60拿到了一分钟,在乘以60拿到了小时,然后乘以24拿到天,也就是一条索要占据的毫秒。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var cal1 = Calendar.getInstance()
var cal2 = Calendar.getInstance()
//为cal2对象添加时间
cal2.add(Calendar.DATE, 10)
cal2.add(Calendar.HOUR, 12)
cal2.add(Calendar.MINUTE, 25)
cal2.add(Calendar.SECOND, 36)
var surplusTime = cal2.timeInMillis - cal1.timeInMillis//使用毫秒来进行减法操作(1秒=1000毫秒)

//1.获取相减后的天数
var day = surplusTime / (1000 * 60 * 60 * 24)
print("\r\n" + day)
//2.获取相减后的小时
var hour = surplusTime / (1000 * 60 * 60)
print("\r\n" + hour)
//3.获取相减后的分钟
var minute = surplusTime / (1000 * 60)
print("\r\n" + minute)

输入结果

1
2
3
10
252
15145

第二种

是不是有一种乍一看就想关掉的节奏,起始并不难写,也不用去背,只要理解思路就很简单了。可以看到我们手动将cal2的时间加上了特定的值,也就是说cal2cal1多出了10天,12小时,25分钟,36秒,最后我们想要得出这个结果。先从第一个计算来进行分析,可以看到和上边我们说的第一种计算方式是一样的,那么到了hour的计算就不同了,我们把计算day的时用的/换成了%也就是取余/取模,说白了就是取它的余数(10/3=3.33333….;那么10%3=1),就是说要把除天数以外的值拿到然后在看看有几个hour。最后取得都是int类型,也就是说不含小数位。如果这个理解了那么后边的依次类推即可,最主要是去理解这个思路!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var cal1 = Calendar.getInstance()
var cal2 = Calendar.getInstance()
//为cal2对象添加时间
cal2.add(Calendar.DATE, 10)
cal2.add(Calendar.HOUR, 12)
cal2.add(Calendar.MINUTE, 25)
cal2.add(Calendar.SECOND, 36)
var surplusTime = cal2.timeInMillis - cal1.timeInMillis

var time = cal2.timeInMillis - cal1.timeInMillis
var day = time / (1000 * 60 * 60 * 24)
var hour = (time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
var minute = ((time % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) / (1000 * 60)
var second = (((time % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) % (1000 * 60)) / 1000
var millisecond = ((((time % (1000 * 60 * 60 * 24)) % (1000 * 60 * 60)) % (1000 * 60)) % 1000) / 1

print("\r\n" + day)
print("\r\n" + hour)
print("\r\n" + minute)
print("\r\n" + second)
print("\r\n" + millisecond)

输出结果

1
2
3
4
5
10
12
25
36
11