【问题标题】:dividing time using Java使用Java划分时间
【发布时间】:2014-06-20 04:46:19
【问题描述】:

我正在使用 yahoo 产品 API 来使用时间限制从 yahoo 获取产品。我通过开始时间和结束时间来获得该日期之间可用的产品。将这些日期与他们提供的用于获取产品的 URL 一起传递。

在 yahoo 中,每次通话只能获得 1000 件产品,所以我要做的是给 1 个月的时间限制,然后拨打电话并在该时间限制内获得产品。在某些情况下它不会超过 1000,但在某些情况下,如果它会超过 1000 个产品,我想将时间分成两半(1 个月到 15 天的时间间隔)并再次检查并重复此操作,直到我在那个时间戳中得到少于 1000 个产品.

除了划分时间之外,我已经完成了所有其他的事情。请帮帮我。

【问题讨论】:

  • 不知道约达时间。但是您可以使用 java.util.Calendar 来实现这一点。您将开始时间和结束时间作为 2 个日历对象。通过将结束日历移动到中点,递归地将间隔划分为更短的间隔。 endCalendar.setTime(endCalender.getTimeinMillis - (endCalender.getTimeInMillis - startCalender.getTimeInMillis)/2)
  • 我现在给时间硬编码。不采用系统时间戳。例如 private static final Long start_date=20140424101010L;私人静态最终长结束日期=20140430101010L;考虑这是我给的时间。 yyyymmddhhmmss 并且在这个时间限制内我正在检查,如果它超过我需要划分那个时间。如果我要检查 05 月 1 日到 05 月 30 日的日期,如果超过 1000,我想从 05 月 15 日到 30 日检查。
  • 您可以根据您提供的时间戳构造日历对象。日历对象不一定需要系统时间。

标签: java calendar jodatime java-time


【解决方案1】:

使用Joda-Time 库:

Seconds diff = Seconds.secondsBetween(start,end);
int halfDiff = diff.getSeconds()/2;
end = end.minusSeconds(halfDiff)

【讨论】:

  • 静态列表 splitDuration(DateTime start, DateTime end, long chunkAmount, long chunkSize) { long millis = start.getMillis(); List list = new ArrayList(); for(int i = 0; i
  • 请阅读 joda javadocs 以了解我提供的代码。我只回答了关于划分时间的部分。
  • @sarath 在 StackOverflow.com 中搜索“joda”。你会发现很多例子来帮助你快速掌握 Joda-Time 的窍门。非常值得努力。与 Java 捆绑在一起的 java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。
【解决方案2】:

java.time.Duration是可分割的时间间隔

LocalDateTime t1 = LocalDateTime.now();
LocalDateTime t2 = t1.plusMonths(1);
Duration t = Duration.between(t1, t2).dividedBy(2);
t2 = t1.plus(t);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 2015-07-07
    • 2011-08-20
    • 2021-10-30
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多