【问题标题】:Java date jump to the next 10th minuteJava 日期跳转到下一个第 10 分钟
【发布时间】:2011-01-05 17:36:17
【问题描述】:

我需要快速实现要包含在事件管理系统中的“日期跳转”算法。
触发事件并将日期(在同步方法中)设置为下一个 10 分钟。

例如

  Event occurs at "2010-01-05 13:10:12" and sets the 
  next date to be "2010-01-05 13:20:00"

如果一个事件恰好(假设)在第 10 分钟发生,则必须设置下一个事件

  Event occurs at "2010-01-05 13:30:00" and sets the 
  next date to be "2010-01-05 13:40:00"

(不太可能因为日期下降到 1/1000 秒,但以防万一......)。

我的第一个想法是获取当前的 Date() 并直接使用 getTime() 方法中的 ms,通过整数(长)除法,例如 ((time / 10mn)+1)*10mn

由于它必须快速,而且可靠,我想我会在实施之前询问我的操作系统同事。

【问题讨论】:

标签: java date


【解决方案1】:

您可以使用/调整我对一个非常相似的问题的回答:

How to round time to the nearest quarter in java?

类似这样的:

int unroundedMinutes = calendar.get(Calendar.MINUTE);
int mod = unroundedMinutes % 10;
calendar.add(Calendar.MINUTE, mod == 0 ? 10 : 10 - mod);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

【讨论】:

  • 在速度方面,与getTime()/ 相比,日历分配和add() 方法的性能如何? (需要快)
【解决方案2】:

您使用以毫秒为单位的纪元时间的方法不适用于任意时区,因为某些时区与 GMT 有 N*15 分钟的偏移。在这些时区内,您的代码会将区间 5-14 移动到 15、15-24 到 25 等等。

您是否在 GregorianCalendar 类中操作相应字段时实际测试过性能并得出性能不足的结论,或者您是否只是为了好玩而重新发明轮子?

【讨论】:

  • 希望您能根据我的要求给我一个建议。
  • 嗯,你的方法显然不可靠。不可能知道日历方法是否满足您的其他要求(快速),除非您指定“快速”的确切含义,让我访问您的生产硬件以进行基准测试并为这项工作付费。或者,您当然可以自己花五分钟来检查它是否足够快?
猜你喜欢
  • 2014-06-12
  • 2011-01-12
  • 1970-01-01
  • 2014-06-12
  • 2017-02-02
  • 2020-02-15
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多