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

如何在Joda时间内进入进度周期?

荀子轩
2023-03-14

在乔达时代,有没有一种简单的方法可以达到以人为中心的风格?

例如,如果我想要最后4天,我的意思是,给我一个周期(或者间隔可能更合适)3整天,从当前进行中的一天到当前时间。所以我预计,到当前时间间隔为1天,1天,1天,n毫秒。

或者对于过去的5周,给我4个完整的星期和当前进行中的星期到当前时间。

我花了一些时间研究这个问题,困难的部分是尝试将一个时期“正常化”为人类对这个时期结束的定义。因此,从今天开始,你需要正常化到一天的开始(总是午夜),然后找到从那到现在的间隔。几个月来,这是非常棘手的,你需要正常化到月初,然后到现在。。。等等,为了让这变得更加困难,我试图避免用特定于周期的规范化逻辑写一个巨大的案例陈述,我绞尽脑汁试图找到一种通用的方法。

以下是我当前的代码(在Groovy中)

static List generatePreviousIntervals(BaseSingleFieldPeriod period,
                              int count,
                              DateTime end = DateTime.now()) {

    if (count < 1) {
        return []
    }

    def intervals = []
    Interval last
    count.times {
        def finish = last?.start ?: end
        def next = new Interval(period, finish)

        intervals.add(next)
        last = next
    }

    // reverse so intervals are in normal progression order
    intervals.reverse()
}

这是Joda Time可以轻松做到的吗?或者,我是否需要在特定的时间间隔内手动滚动很多逻辑?

共有2个答案

林博厚
2023-03-14

就像你需要Rest一样:http://joda-time.sourceforge.net/apidocs/org/joda/time/Interval.html

(是的,这很容易,与香草java日期/日历相比非常容易)

要获取一天中的时间:

int hour = dt.getHourOfDay();
int min = dt.getMinuteOfHour();
int sec = dt.getSecondOfMinute();
林运浩
2023-03-14

这就是我最后所做的,我没有足够聪明来避免一个案例陈述,但幸运的是我使用了少量的句型,所以它并不像我想象的那么大,

/**
 * Reset Joda DateTime by normalize it back to the beginning of the period
 */
static DateTime resetDate(BaseSingleFieldPeriod period,
                                DateTime date) {
    LocalDate out = new LocalDate(date)
    switch (period) {
        case Years.ONE:
            out = out.withMonthOfYear(1).withDayOfMonth(1)
            break;
        case Months.ONE:
            out = out.withDayOfMonth(1)
            break;
        case Weeks.ONE:
            // adjust day of week because Joda uses ISO standard Monday
            // as start of the week
            out = out.withDayOfWeek(1).minusDays(1)
            break;
        case Days.ONE:
            // nothing to for days as we have already removed time by
            // converting to local date
            break;
        default:
            throw new UnsupportedOperationException("Unsupported period $period")
    }

    // convert to date minute to avoid giving specific time
    out.toDateMidnight().toDateTime()
}

如果有人有更优雅的解决方案,请告诉我。

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

  • 我想让水平进度条从0移动到100。我在布局中添加了这段代码。我应该怎么做才能移动这个进度条?

  • 我被要求做一个按升序对数组进行排序的程序。我这样做了: 输入不会超过10个数字。这可以用比我这里更少的代码完成吗?我希望代码尽可能短。任何帮助都将不胜感激。谢谢!

  • 问题内容: 如何在Python中进行时间延迟? 问题答案: 这是另一个示例,其中某件事大约每分钟运行一次:

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

  • 问题内容: 在Go中进行日期比较是否有任何选择?我必须根据日期和时间- 独立地对数据进行排序。因此,我可以允许一个对象在一定日期范围内发生,只要它也在一定时间范围内出现即可。在此模型中,我不能简单地选择最旧的日期,最年轻的时间/最新的日期,最新的时间和Unix()秒来比较它们。我真的很感谢任何建议。 最终,我编写了一个时间解析字符串比较模块,以检查时间是否在范围内。然而,这并不顺利。我有一些大问题