首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >上个星期一凌晨2点怎么走?

上个星期一凌晨2点怎么走?
EN

Stack Overflow用户
提问于 2015-11-21 06:01:07
回答 1查看 389关注 0票数 0

我在Java 7。

我是尤达-时间的新手,我想问一个简单的问题。上周一凌晨2点怎么去。日期?我是说这个:

代码语言:javascript
运行
复制
____________________________________________________________________________
                              Week 1                          |   Week 2    |
______________________________________________________________|_____________|
 MONDAY       TUESDAY WENDSDAY THURSDAY FRIDAY SATURDAY SUNDAY|  MONDAY ... |
2-00 a.m.                                                     | 2-00 a.m.   |
______________________________________________________________|_____________|

所以,我需要返回Week 1的周一凌晨2点,,目前的时间是从Week 1的周一凌晨2点到Week 2的周一的2-00 a.m.

有什么相对简单的方法可以通过Joda-Time实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-21 06:34:56

首先,在Joda-Time中找到一个解决方案.其次,在新的java.time框架中构建了一个类似的解决方案,内置到Java8和更高版本中,作为Joda-Time的继承者。见教程

以下两种解决方案都遵循类似的逻辑,全面概括如下。Joda DateTimeJava8 LocalDateTime使用fluent接口提供不可变的日期时间实现。要进入最后一周的星期一凌晨2点,您可以采取以下步骤,使用fluent接口链接后续调用:

  1. LocalDateTime.minus方法减去一周中的一天和星期一的差,得到过去星期一的当前时间。
  2. 减去今天毫秒,到达星期一上午00:00以上。
  3. 使用LocalDateTime.plus方法增加2小时。

尤达-时间

代码语言:javascript
运行
复制
    DateTime currentTime = new DateTime();
    DateTime dateResult;
    boolean shouldReturnLastMonday = (currentTime.getDayOfWeek() != DateTimeConstants.MONDAY ||
            currentTime.hourOfDay().get() < 2);
    if (shouldReturnLastMonday) {
        dateResult = currentTime.minus(Days.days(currentTime.getDayOfWeek() - DateTimeConstants.MONDAY))
                .minus(currentTime.getMillisOfDay())
                .plus(Hours.hours(2));
    } else {
        dateResult = currentTime.minus(currentTime.getMillisOfDay())
                .plus(Hours.hours(2));
    }
    System.out.println(dateResult);

java.time

代码语言:javascript
运行
复制
  LocalDateTime currentTime = LocalDateTime.now();
  LocalDateTime dateResult;
  boolean shouldReturnLastMonday = (currentTime.getDayOfWeek() != DayOfWeek.MONDAY) ||
                                    (currentTime.getDayOfWeek() != DayOfWeek.MONDAY && currentTime.getHour() < 2);
  if(shouldReturnLastMonday) {
      dateResult = currentTime.minus(currentTime.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue(), ChronoUnit.DAYS)
              .minus(currentTime.getLong(ChronoField.MILLI_OF_DAY), ChronoUnit.MILLIS)
              .plus(2, ChronoUnit.HOURS);
  } else {
      dateResult = currentTime.minus(currentTime.getLong(ChronoField.MILLI_OF_DAY), ChronoUnit.MILLIS)
              .plus(2,ChronoUnit.HOURS);
  }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33840236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档