首页 > 解决方案 > 如何将 x 天添加到当前时间,然后从计算的时间中获取天数、小时数、分钟数

问题描述

这是我的代码,但结果与预期不同。它显示 14 天而不是 30 天,我希望它显示剩余的天数、小时数、分钟数,直到时间 >= System.currentTimeMillis() (直到计算出的时间戳高于或等于当前时间(以毫秒为单位))

int time = (int)System.currentTimeMillis() + 30 * 24 * 60 * 60); //current Time + 30 days

int day = (int)TimeUnit.MILLISECONDS.toDays(time);
int hour = (int) TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
int min = (int) ((int)TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60));





标签: java

解决方案


这里有各种各样的问题。

int time = (int)System.currentTimeMillis() + (30 * 24 * 60 * 60)

在这一行中,您将分钟添加到毫秒。(30 天,24 小时,60 分钟,60 秒)。

此外,您将所有内容都转换为 int,而函数返回 long。在说话的那一刻,这个函数应该返回的值是:1580097230808(它以毫秒为单位返回自纪元以来的时间)。

int 的最大值是 2,147,483,647,小于 1.580.097.230.808,所以基本上会导致溢出(会溢出多次)。

此外,需要添加到时间变量 (30 * 24 * 60 * 60 * 1000) 的值应该首先转换为 long,因为它对于 int 来说太大了。

因此,当我们执行所有这些步骤时,将产生以下代码:

long time = System.currentTimeMillis() + ((long) 30*24*60*60*1000);

System.out.println(time);

int day = (int)TimeUnit.MILLISECONDS.toDays(time);
int hour = (int) TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
int min = (int) ((int)TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60));
System.out.println(day);
System.out.println(hour);
System.out.println(min);

打印以下结果:

1584393882681 // time in milliseconds since epoch
18337 // number of days since epoch (not the right output)
21 // not the right output
24 // not the right output

要获得正确的输出:

long currentTime = System.currentTimeMillis();
long time = System.currentTimeMillis() + ((long) 30*24*60*60*1000);

System.out.println(time);

int day = (int)TimeUnit.MILLISECONDS.toDays(time - currentTime);
int hour = (int) TimeUnit.MILLISECONDS.toHours(time - currentTime);
int min = (int) TimeUnit.MILLISECONDS.toMinutes(time - currentTime);
System.out.println(day);
System.out.println(hour);
System.out.println(min);

印刷:

1584394180556 // time since epoch in milliseconds
30 // days left
720 // hours left
43200 // minutes left

因此,对于最后一个函数,您需要给它们一个以毫秒为单位的时间,这样您就不必自己进行任何转换。基本上我们做了我们计算的时间戳减去当前时间,这些函数将根据值(时间 - 当前时间)计算天、小时和分钟。


推荐阅读