在Java中以HH:MM:SS格式连续减少时间

4
我需要在项目中实现一个竞标系统,在服务器上的拍卖表中,我有一个开始时间和结束时间的字段。
我的做法是,当用户搜索时,他只能看到仍在进行中的拍卖物品。
当用户点击该物品时,他会被带到一个页面,可以在那里进行竞标。我会获取开始时间和结束时间之间的时间间隔,然后开始减少时间。
是否有任何现有的代码可用于减少格式为hh:mm:ss的Java时间?
编辑:问题中有一个错误,要减少的时间是结束时间与当前时间之间的时间。

1
你真的想要减少一个字符串吗?减少一个数字然后以指定格式显示不是更好吗?更好的方法是不要减少任何东西,只需通过计算差异来显示剩余时间。 - 6502
可能只是一个打字错误,但我认为你的意思是获取当前时间和结束时间之间的间隔。 - Shaded
2个回答

3

你不需要减少时间,而是需要显示剩余的时间。即现在和结束时间之间的间隔。您正在使用Java客户端吗?还是需要将代码写成JavaScript?

编辑:假设竞标在12:00:00结束,当前时间为11:59:20(还有40秒),则需要进行以下计算。

long endBidTime = .... // today at 12:00:00
long currentTime = System.currentTimeMillis();
long remaining = currentTime - endBidTime;
long hours = remaining / 3600000;
long mins = remaining / 60000 % 60;
long seconds = remaining / 1000 % 60;
String remainingText = "%02d:%02d:%02d".format(hours,mins,seconds);

您始终在根据参考时间计算时间,因此在currentTimeMillis()自然推进时间时无需递减任何内容。


1
@Puspendu,我认为逻辑思维来自于痛苦的经验。我确实认为他从错误的方向来解决问题。我经常这样想论坛上发布的问题。 - Peter Lawrey
嘿,在竞标系统中,如果剩下20秒钟,这20秒钟会保持不变,不会减少,我只是在询问一个想法,也许有人曾经使用过或者有经验,因为来自使用过的人的想法比网络上的想法更好。 - Noor
是的,我已经为拍卖网站做过这个。服务器不会说还剩20秒。它会在竞标结束时告诉客户端,并且客户端显示剩余时间。即使客户端不每秒更新一次,竞标时间的结束时间仍然保持不变,倒计时时钟在每次更新时都将是正确的。 - Peter Lawrey
1
你不需要减少当前时间和结束时间之间的时间。随着时间的推移,这个间隔应该会减少。你只需要定期计算并显示它即可。 - Peter Lawrey
也许是因为这是我第一次做这个,所以我有些困惑,但假设一个客户进入了某个页面,距离拍卖结束还剩40秒,系统难道不应该每秒钟减少40秒,以显示实际剩余时间吗? - Noor
你可能会问有什么区别?区别在于你不能可靠地让某件事每秒发生一次。这意味着你可能每秒被调用,也可能不被调用。如果你使用一个固定的参考点,那么无论它每秒被调用多少次都没关系,因为每当代码被调用时它都是正确的。例如,它可以每秒被调用两次或每两秒被调用一次,而且不会太不准确。 - Peter Lawrey

1

我认为我会采用以下方式,因为我不想依赖客户端时间:

-> 从服务器获取所需的拍卖品 -> 使用服务器时间计算剩余时间(即当前服务器时间-拍卖结束时间)

-> 将剩余时间发送到客户端 -> 在客户端减少直到0秒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接