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

使用Joda-Time在给定周期的基础上取整DateTime

夏侯旻
2023-03-14
    null
    null

我最初的想法是使用perioddurationfieldtype getFieldTypes()方法,并且对于datetime中的每个匹配字段(在最大字段下面),将它们设置为零。但是,我不知道如何从datetime中获取dateTime以及如何将它们与durationFieldType进行比较。

我不想使用巨大的If else方法。

共有1个答案

司空通
2023-03-14

例子bellow是一个解决方案,如果你可以用天来表示周期(可以修改为周,月等)。使用DateTime Joda Java库。

不幸的是,与四舍五入你要求我看到可能的问题。您需要从计算周期开始有一个时间起点。在下面的示例中,我们计算自世界协调时1970/01/01 00:00:00以来的周期。或者你真的要求从一个月(一年)的第一天起获得3天的周期?会更有意义。

你需要问自己的问题:闰日会发生什么?

DateTime roundDays(DateTime dt, int windowDays) {
    Duration p = Duration.standardDays(windowDays);

    long t = dt.getMillis() / p.getMillis() * p.getMillis();
    // Keep TimeZone and round floor to a day
    return new DateTime(t, dt.getZone()).dayOfMonth().roundFloorCopy();
}
DateTime dt = new DateTime(1385578964580L, DateTimeZone.UTC);

System.out.println(roundDays(dt, 3));
System.out.println(roundDays(dt.plusDays(2), 3));
System.out.println(roundDays(dt.plusDays(4), 3));
System.out.println(roundDays(dt.plusDays(6), 3));

// Prints data rounded to every 3 days
// 2013-11-26T00:00:00.000Z
// 2013-11-29T00:00:00.000Z
// 2013-11-29T00:00:00.000Z
// 2013-12-02T00:00:00.000Z
 类似资料:
  • 所以基本上我需要做的就是想办法从2013-07-30T00:00:000000+11:00中提取出+11:00。请救命!

  • 问题内容: 如何通过Joda-Time获得特定年份的最大周数? 问题答案: @cody评论 两种方法之间的区别 .withWeekOfWeekyear()和.withWeekyear() 例

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

  • JodaTime 提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包括: 1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。 2. 易

  • 问题内容: 您如何使用Joda-Time根据给定的语言环境确定星期几被认为是“开始” ? 要点:大多数国家/地区将星期一作为国际标准(!)。其他人则使用星期日(特别是美国)。其他人显然是星期六。显然是星期三吗? 维基百科“七天工作周” #Week_number 问题答案: Joda-Time在周一至周日使用ISO标准。 它没有能力获得星期几的第一天,也没有基于标准星期一以外的任何一天返回星期几索引

  • 问题内容: 我有准备好的陈述 其中时间是类型的时间戳在的PostgreSQL数据库。 我要插入一个Joda-Time DateTime对象,或者应该说我正在尝试。我找不到将DateTime对象转换为java.sql.Timestamp的方法。我已经阅读了Joda- Time文档,看不到对此的任何引用。 谢谢。 问题答案: 您可以先将Joda DateTime转换为长(自纪元以来的毫秒),然后从中创