springboot学习18天-第一天

一位因疫情失业的游戏爱好者决定转行IT,购买了SpringBoot教程,计划通过坚持不懈的学习实现自我提升,摆脱困境。

从2月2号马来西亚禁止中国大陆公民入境开始,我失业了。

颓废的我疯狂地打了14天的英雄联盟,打了大约有200局,被数千人坑过,决定弃坑。这个游戏是自己努力没有办法,输赢全看队友。所以我想必须要做些自己努力就能成功的事。我命由我不由天。

昨天晚上淘宝买了一套springboot的教程,我热血沸腾,很想把整个教程都看完。但是我知道学习靠热血是没用的,要靠坚持。我很怕看了几天觉得太枯燥了就放弃了,所以写下这个博客。总共有108课时,按照接受能力平均一天看7个课时。未来14天,我每天晚上8点左右会总结一天所学的内容。如果我哪天没发博客了,就是我偷懒了。所以我要让所有人看到我的坚持。

这是第一天。今天晚上也会发总结博客。

<think>好的,我现在需要帮助用户在Spring Boot中获取最近一周的日期,并提供示例代码。首先,我得回忆一下Java中处理日期和时间的方法,因为Spring Boot本身是基于Java的,所以核心应该还是使用Java的日期时间API。 用户提到的是获取最近七的日期,也就是包括今在内的过去七,或者是从今开始往后七?这里可能需要确认,但通常类似的需求可能是指过去七,比如统计最近一周的数据。假设用户需要的是过去七的日期,包括今,共七。 在Java 8及以上,推荐使用java.time包中的类,比如LocalDate。LocalDate提供了方便的日期计算方法,比如minusDays()和plusDays()。因此,基本思路是获取当前日期,然后循环减去数,得到过去六,加上今就是七。 接下来,我需要考虑如何生成一个包含这七日期的列表。可以用一个循环,从0到6,依次计算当前日期减去相应的数,然后收集到一个List中。或者使用Java 8的流来处理,比如IntStream.range().mapToObj(),这样代码会更简洁。 比如,当前日期是LocalDate.now(),然后循环i从0到6,用now.minusDays(i)来获取每一的日期。不过需要注意的是,如果i是0,就是今,i是1就是昨,依此类推,这样得到的日期列表会是倒序的,从今到六前。或者用户可能需要正序,从六前到今,这需要确认。但通常可能需要按自然顺序排列,即从最早的日期到最近的日期,所以可能需要调整顺序。 例如,假设需要最近七包括今,按从过去到现在的顺序排列,那么应该是六前到今的日期。这时候,循环可以从6到0,依次取now.minusDays(6 - i),或者调整循环的方向。或者先生成从今到六前的日期,再反转列表。 不过可能更简单的是,先获取当前日期,然后循环6次,每次减去相应的数,并将结果存入列表。或者使用流的方式: List<LocalDate> lastSevenDays = IntStream.rangeClosed(0, 6) .mapToObj(i -> LocalDate.now().minusDays(i)) .sorted() .collect(Collectors.toList()); 但这里需要注意,如果直接使用minusDays(i)的话,i从0到6,生成的日期是今、昨、前……六前,这样列表的顺序是倒序的。所以需要排序,或者调整i的范围。或者用户可能需要从六前到今的顺序,那么应该从6到0,比如: IntStream.range(0,7) .mapToObj(i -> LocalDate.now().minusDays(6 - i)) 这样i从0到6,每个i对应的数是6-i前,即第一天是6前,最后一是今。这样生成的列表顺序是正确的,无需排序。 或者,也可以先获取开始日期(今减去6),然后循环7次,每次加一。例如: LocalDate startDate = LocalDate.now().minusDays(6); List<LocalDate> dates = new ArrayList<>(); for (int i = 0; i < 7; i++) { dates.add(startDate.plusDays(i)); } 这样得到的列表就是从六前到今,按顺序排列的。这种方法可能更直观,容易理解。 另外,还需要考虑时区的问题。LocalDate.now()默认使用系统默认时区,如果应用运行在可能有不同时区的服务器上,可能需要指定时区,比如LocalDate.now(ZoneId.of("Asia/Shanghai"))。 接下来,用户需要在Spring Boot中实现这个功能,所以可能需要写一个Controller或者Service中的方法,返回这些日期。比如,在Controller中处理请求,返回日期列表。 示例代码可能包括: 在Controller里: @RestController public class DateController { @GetMapping("/last-week-dates") public List<String> getLastWeekDates() { LocalDate today = LocalDate.now(); List<LocalDate> dates = new ArrayList<>(); for (int i = 6; i >= 0; i--) { dates.add(today.minusDays(i)); } // 或者使用流的方式 // List<LocalDate> dates = IntStream.range(0, 7) // .mapToObj(i -> today.minusDays(6 - i)) // .collect(Collectors.toList()); return dates.stream() .map(LocalDate::toString) .collect(Collectors.toList()); } } 这里返回的是字符串形式的日期列表,比如["2024-03-18", ..., "2024-03-24"]。用户可能需要不同的格式,比如yyyy-MM-dd或者其他,可以使用DateTimeFormatter来格式化。 例如: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); ... .map(date -> date.format(formatter)) 另外,是否需要考虑时间?用户的问题是关于日期的,所以可能不需要时间部分。 还需要确认是否需要包括当的日期。比如,假设今是24号,那么最近七18-24号,共七。上述代码应该正确生成这样的列表。 另外,可能需要处理跨月、跨年的情况,但LocalDate会自动处理这些,所以无需额外代码。 现在,检查是否有遗漏的地方。比如,是否正确处理了时区?如果应用部署在不同时区的服务器上,可能需要明确设置时区。例如,使用LocalDate.now(ZoneId.of("UTC"))。 此外,用户可能需要将日期以某种格式返回,比如字符串数组,或者JSON对象,但示例代码中直接返回字符串列表应该足够。 测试部分,可以建议用户调用该接口,查看输出是否符合预期。 总结步骤: 1. 使用LocalDate获取当前日期。 2. 生成过去六到今的日期列表。 3. 格式化日期为字符串(可选)。 4. 返回结果。 现在,根据这些思考,编写示例代码,并解释关键点,比如时区、日期顺序、格式化等。</think>在Spring Boot中获取最近七的日期,可以通过Java 8的`java.time.LocalDate`类实现。以下是示例代码及分步说明: --- ### **1. 添加依赖** 确保`pom.xml`已引入Spring Boot Web依赖(用于创建REST接口): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` --- ### **2. 编写核心逻辑** 使用`LocalDate`计算日期,并生成最近七的列表: ```java import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.stream.IntStream; public class DateUtils { // 方法1:通过循环生成最近七(包含今) public static List<LocalDate> getLastSevenDays() { LocalDate today = LocalDate.now(); List<LocalDate> dates = new ArrayList<>(); for (int i = 6; i >= 0; i--) { // 从6前到今的顺序 dates.add(today.minusDays(i)); } return dates; } // 方法2:通过Stream流生成(推荐) public static List<LocalDate> getLastSevenDaysWithStream() { LocalDate today = LocalDate.now(); return IntStream.range(0, 7) .mapToObj(i -> today.minusDays(6 - i)) // 从6前到今日 .toList(); } } ``` --- ### **3. 在Controller中提供接口** 创建REST接口返回日期列表: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.format.DateTimeFormatter; import java.util.List; @RestController public class DateController { @GetMapping("/last-week-dates") public List<String> getLastWeekDates() { List<LocalDate> dates = DateUtils.getLastSevenDays(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); return dates.stream() .map(date -> date.format(formatter)) .toList(); } } ``` --- ### **4. 关键说明** - **时区问题**:`LocalDate.now()`默认使用系统时区。如需指定时区,可修改为: ```java LocalDate today = LocalDate.now(ZoneId.of("Asia/Shanghai")); ``` - **日期顺序**:代码生成的日期列表为**从最早的一到今日**(例如:`["2024-03-18", ..., "2024-03-24"]`)。 - **格式化**:通过`DateTimeFormatter`自定义输出格式(如`dd/MM/yyyy`)。 --- ### **5. 测试接口** 启动应用后访问`http://localhost:8080/last-week-dates`,输出示例如下: ```json ["2024-03-18", "2024-03-19", "2024-03-20", "2024-03-21", "2024-03-22", "2024-03-23", "2024-03-24"] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值