当前位置: 首页 > 知识库问答 >
问题:

将Joda时间段划分为所需大小的间隔?

杨征
2023-03-14

我有一个“周期”(P)的时间,由开始时间(S)和结束时间(E)表示。我想把P分成大小为D的C块。也就是说,

P=C*dr,其中R是余数或剩余时间。

eg.

S = NOW, E = 10 sec after NOW, D = 3 sec.
Therefore, P = 10 sec, C = 3, R = 1 sec. 

我想存储和显示所有的块C及其开始时间、结束时间和大小。最后,我想存储并显示剩余的内容。我如何利用乔达的时间做到这一点?

API是否提供了简单的方法和类来实现这一点,或者我将不得不想出一条出路?

这个问题是我在这里发布的另一个问题的一小部分

共有3个答案

赫连心思
2023-03-14

以防有些人在给定时间之间寻找相等的分母,这里是代码

`

private List<Interval> splitDateTime(long start, long end, int intervalNo) {
        long interval = (end - start) / intervalNo;
        List<Interval> list = new ArrayList<Interval>();
        for (long i = start + interval; i < end; i += interval) {
            list.add(new Interval(start, i));
            start=start + interval;
        }
        list.add(new Interval(start, end));
        return list;
    }

`

米修平
2023-03-14

在这种情况下,我最终做到了:

private static Collection<Interval> splitDuration(Interval interval, int chunks)
{
    long startMillis = interval.getStartMillis();
    long endMillis = interval.getEndMillis();
    long durationMillis = endMillis - startMillis;
    long chunkSize = durationMillis / chunks;

    Collection<Interval> list = new ArrayList<Interval>();
    for (int i = 1; i <= chunks; ++i) {
        list.add(new Interval(startMillis, startMillis += chunkSize));
    }

    return list;
}

主旨

干杯

沈子昂
2023-03-14

我不确定这段代码是否是你想要的,但它可能会让你走上正轨。

我假设你有两个DateTimes来表示开始和结束日期,因为Joda-Time周期代表一段时间,比如1个月或2周。它没有特定的开始或结束,比如代表两个瞬间之间的一段时间的间隔。

import java.util.*;
import org.joda.time.*;

class Test {
    public static void main(String... args) {
        DateTime now = new DateTime();
        List<Interval> list = splitDuration(now, now.plusSeconds(10), 3, 3 * 1000);

        for(Interval i : list) {
            System.out.println(i.getStart() + " - " +
                               i.getEnd() + " - " +
                               i.toDurationMillis());
        }
    }

    static List<Interval> splitDuration(DateTime start, DateTime end, long chunkAmount, long chunkSize) {
        long millis = start.getMillis();
        List<Interval> list = new ArrayList<Interval>();

        for(int i = 0; i < chunkAmount; ++i) {
            list.add(new Interval(millis, millis += chunkSize));
        }

        list.add(new Interval(millis, end.getMillis()));
        return list;
    }
}

在我的例子中,输出:

2013-03-12T12:29:01.781+01:00 - 2013-03-12T12:29:04.781+01:00 - 3000
2013-03-12T12:29:04.781+01:00 - 2013-03-12T12:29:07.781+01:00 - 3000
2013-03-12T12:29:07.781+01:00 - 2013-03-12T12:29:10.781+01:00 - 3000
2013-03-12T12:29:10.781+01:00 - 2013-03-12T12:29:11.781+01:00 - 1000
 类似资料:
  • 问题内容: 我有一个数据集: 我想基本上在一个小时内“拆分”这些时间间隔,例如: 到目前为止,这是我的代码(该想法的积分发给@DumitrescuBogdan,将通话数据分为15分钟间隔): 后半部分(在“全部合并”之后)不产生任何结果,前半部分产生以下结果: 谢谢,我是初学者。我了解第一部分;坦白地说,我不明白下半场 我愿意接受其他解决方案。 我正在使用MS-Access 2010 问题答案:

  • 我的用例——我是一名医生。在某一天,我可以工作几个小时,但有些时间不可用。我想创建一个对象“周期我的工作日”。当有人预约上午8点到9点(即“周期病人1预约”)时,该时段将从我的工作日“删除”。当新患者访问myWorkDay时,他只看到myWorkDay-病人1约会。如果病人1释放了他的时隙,那么新患者会看到完整的myWorkDay。 有可能使用JodaTime做到这一点吗? 有一个额外的要求是不必

  • 问题内容: Joda-time具有一个Interval类,该类介于DateTime之间。什么可以用于一系列LocalDate? 我想要一个表示例如“从2011年1月1日到2011年10月1日”的对象,而没有时间(或时区)进入画面。 据我所知,joda-time没有内置任何功能。如果不存在任何东西,而我们会创建它,它应该是什么样?最重要的是,它可以实现joda- time的哪些接口以最好地集成到其他

  • 我正在尝试使用Joda在一个简单的Java程序中获取UTC时间戳: 程序输出如下: 毫秒值是正确的UTC时间(即用时区确认)第二个值是时区。 我需要的是UTC值不变为(即独立于TZ),用于数据库写入。这可能吗? 我知道是本地日期(GMT-4),是UTC(GMT-0)。日期的输出值如下: 我尝试了所有组合,试图将的UTC值作为java.sql.TimeStamp: 用于测试的打印输出: 第一行是正确

  • 如果本地时间位于UTC时区,那么如何将转换为Unix时间戳? >。

  • 问题内容: 如何指定格式字符串以将日期单独转换为字符串。就我而言,只有日期部分是相关的 将其构造为失败: 有错误 可能是因为我应该改用。但是,我看不到任何格式化程序。什么是转换的最佳方式进入(或别的东西,如果这是不正确的表示) 谢谢… 问题答案: 您可能正在寻找。这有点令人困惑,因为它采用了通用类型,但是文档指出如果将a 传递给构造函数,它将使用一个知道如何处理a的a ,例如