java - 如何在Java中获取不完整一周的第一天/最后一天

标签 java algorithm date calendar

感谢您阅读我的内容。

我有一个小问题,我需要知道一周的第一天/最后一天一个月和一年,所以:

public String getFirstDayOfWeekAndMonth(int year, int month, int week){
   Calendar weekCalendar = Calendar.getInstance();
   weekCalendar.clear();
   weekCalendar.set( Calendar.YEAR, year );
   weekCalendar.set( Calendar.MONTH, month-1); // zero-based
   weekCalendar.set( Calendar.WEEK_OF_YEAR, week );

   return... ?
}

例如下一个日历:

Month    Week     M   T   W   T   F   S   S           FirstDay    LastDay
          1               1   2   3   4   5              1           5
          2       6   7   8   9   10  11  12             6           12
  1       3       13  14  15  16  17  18  19             13          19
          4       20  21  22  23  24  25  26             20          26
          5       27  28  29  30                         27          30

          5                       1   2   3              1           3
          6       4   5   6   7   8   9   10             4           10
  2       7       11  12  13  14  15  16  17             11          17
          8       18  19  20  21  22  23  24             18          24
          9       25  26  27  28                         25          28

          9                       1   2   3              1           3
  3       10      4   5   6   7   8   9   10             4           10
                     ...

我对 2 个月内的星期有疑问(在示例 5 和 9 中)。你能帮帮我吗?

非常感谢。

最佳答案

我推荐使用 brilliant Joda-Time满足您所有计时需求的库(我还建议在您的所有项目中进行标准导入)。

有了这个,一个(不是很干净,但有效的)解决方案是这样的:

public String getFirstDayOfWeekAndMonth(int year, int month, int week) {
    DateTime firstDayOfMonth = new DateTime(year, month, 1, 0, 0, 0, 1);
    DateTime lastDayOfMonth = new DateTime(year, month, firstDayOfMonth.dayOfMonth().getMaximumValueOverall(), 0, 0, 0, 1);

    // european style (MON - SUN)
    DateTime firstOfWeek = new DateTime(year, 1, 1, 0, 0, 0, 1).plusWeeks(week - 1).withDayOfWeek(1);
    DateTime lastOfWeek = firstOfWeek.withDayOfWeek(7);

    int firstDay;
    int lastDay;
    if(firstOfWeek.isBefore(firstDayOfMonth))
        firstDay = firstDayOfMonth.getDayOfMonth();
    else
        firstDay = firstOfWeek.getDayOfMonth();

    if(lastOfWeek.isAfter(lastDayOfMonth))
        lastDay = lastDayOfMonth.getDayOfMonth();
    else
        lastDay = lastOfWeek.getDayOfMonth();

    String returner = String.format("%d - %d", firstDay, lastDay);

    return returner;
}

我不太明白您为什么要从您的方法中返回一个字符串,但我猜您是有原因的。我只是假定了一种格式,您当然可以根据需要更改它。

关于java - 如何在Java中获取不完整一周的第一天/最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430978/

相关文章:

php - 为数据对象集合选择数据结构

MySQL:基于日期范围的计算列

java - 如何定义半满多维数组?

algorithm - 在数学上如何将分类结果与聚类结果进行比较

java - 大堆的 G1GC 日志舍入值

algorithm - 找到最接近另一组的点集

algorithm - 非递归格雷码算法理解

javascript - 生成一年内的随机日期并赋值给var

java - 为什么两个相同的 while 循环表现不同

java - 模型的 Primefaces TabView - 关闭时删除与选项卡关联的模型