【问题标题】:Get start date and end date from week/month/year [closed]从周/月/年获取开始日期和结束日期[关闭]
【发布时间】:2022-12-11 08:21:10
【问题描述】:

我需要从给定的年份和星期中提取开始日期和结束日期,并将它们作为 LocalDate 返回:

示例:年/月/周:2022/12/49 -> date_begin 05/12/2022 - date_end 11/12/2022 这意味着 2022 年的第 49 周从 05/12/2022 开始并在 11/ 结束12/2022

是否有任何 java 内置库可以帮助实现这一目标?

【问题讨论】:

  • 是的,java.time 包。
  • LocalDate提供你所需要的一切
  • 是和不是。 “年-月-周”的概念在 Java 和任何其他系统中都不存在;这不是一回事。那里Java 可以做的诸如一年+一周之类的事情,即您可以将“2022-49”变成“2022-12-05 - 2022-12-11”没问题。您是否需要关于如何转换年+周的答案,完全忽略月份值,或者它有什么意义?如果有人问“年 = 2022,月 = 5,周 = 49”怎么办?这个输入是如何提供的?在一个字符串中,还是 3 个整数?
  • @rzwitserloot 这个月是无关紧要的,因为你说的是​​!输入实际上是以整数形式提供的... int year = 2022, int week = 49 ...

标签: java date datetime


【解决方案1】:

JSR310 有 YearWeek,但更简单的 java.time 没有——因此,最简单的方法是通过解析器,即使您实际上不需要解析它:

int weekYear = 2022;
int weekNum = 49;
LocalDate monday = LocalDate.parse(String.format("%04d-W%02d-1", weekYear, weekNum), DateTimeFormatter.ISO_WEEK_DATE);
LocalDate sunday = monday.plusDays(6);
System.out.printf("Week %d of year %d runs from %s to %s
", weekNum, weekYear, monday, sunday);

注意:格式例如2022-W49-1; 1 代表“星期一”。请注意,这是周年:这意味着开始日期可能在上一年(例如,某些年份的第 1 周从上一年的 12 月 30 日开始),或者结束日期可能在下一年。如果您考虑一下,这是显而易见的(存在从一年开始到下一年结束的周,并且它们必须是某年“周-年”系统的一部分)。只是想我会强调它:)

【讨论】:

  • 作品!多谢
【解决方案2】:

此解决方案也有效

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.WeekFields;

public class Main {
    
    public static final WeekFields US_WEEK_FIELDS = WeekFields.of(DayOfWeek.SUNDAY, 4);

    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2022, 12, 29);
        LocalDate date2 = LocalDate.now();
        System.out.println(formatDate(date1));
        System.out.println(formatDate(date2));
    }
    
    public static int getWeek(LocalDate date) {
        return date.get(US_WEEK_FIELDS.weekOfWeekBasedYear());
    }
    
    public static int getMonth(LocalDate date) {
        return date.getMonthValue();
    }

    public static int getYear(LocalDate date) {
        return date.get(US_WEEK_FIELDS.weekBasedYear());
    }
    
    public static String formatDate(LocalDate date) {
        int week = getWeek(date);
        int month = getMonth(date);
        int year = getYear(date);
        return year + "/" + month + "/" + week;
    }

}

运行时我进入控制台

2022/12/52
2022/12/49

【讨论】:

  • 问题是:“给定一年和一个周数,以 LocalDate 形式获取那年的 7 个日期”。这个答案回答了一个不同的问题,即:“给定一个 LocalDate 形式的日期,得到年、月和周数”——这与所问的相反。
  • 这似乎给出了与所要求的相反的转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多