Java 如何将x天添加到当前时间,然后从计算的时间中获取天、小时、分钟

Java 如何将x天添加到当前时间,然后从计算的时间中获取天、小时、分钟,java,Java,这是我的代码,但结果与预期不同。它显示14天而不是30天,我希望它显示时间>=System.currentTimeMillis()之前剩余的天、小时、分钟(直到计算的时间戳高于或等于当前时间(以毫秒为单位) 这里有各种各样的问题 int time = (int)System.currentTimeMillis() + (30 * 24 * 60 * 60) 在这一行中,您将分钟添加到毫秒。(30天,24小时,60分钟,60秒) 此外,您正在将所有内容强制转换为int,而函数将返回long。此时

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


这里有各种各样的问题

int time = (int)System.currentTimeMillis() + (30 * 24 * 60 * 60)
在这一行中,您将分钟添加到毫秒。(30天,24小时,60分钟,60秒)

此外,您正在将所有内容强制转换为int,而函数将返回long。此时,此函数应返回的值为:1580097230808(它返回自历元以来的时间,单位为毫秒)

int的最大值为2147483647,小于1.580.097.230.808,因此基本上会导致溢出(会多次溢出)

此外,需要添加到时间变量(30*24*60*60*1000)的值也应该被强制转换为long first,因为它对于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

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

请学习堆栈溢出的工作原理,并阅读如何提高问题的质量。然后,您的问题包括您的源代码,这些源代码可以由其他人编译和测试。我看不出代码中有任何问题,我已经发布了复制问题所需的所有代码什么是
时间戳
,为什么您不使用
时间戳
?你所说的“计算回天数、小时和分钟”是什么意思?为什么要使用
TimeUnit
作为unix时间戳?请添加MCVE以明确您的输入内容、您当前得到的结果以及您想要的结果。不知怎的,你把unix时间戳和持续时间混在一起了。哦,时间戳不应该出现在代码中,而是更新了。我已经在问题中解释了我得到的结果和我想要的结果。
1584394180556 // time since epoch in milliseconds
30 // days left
720 // hours left
43200 // minutes left