gpt4 book ai didi

java - 检索上周一和周五日期的最佳方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:27 27 4
gpt4 key购买 nike

我需要获取上周星期一和星期五的日期。为此,我将获得本周星期一的日期并减去 7 天。这给了我上周星期一的日期。

要获得星期五的日期,我必须加 4。这让我有点困惑,因为出于某种原因,一周的第一天是星期日,而不是英国的星期一。

无论如何,这就是我获取日期的方式。

            // Get the dates for last MON & FRI
Calendar cal = Calendar.getInstance();
cal.setTime(date);

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.add(Calendar.DAY_OF_WEEK, -7);

cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

// Get the date on Friday
cal.add(Calendar.DAY_OF_WEEK, 4);

cal.set(Calendar.HOUR_OF_DAY,23);
cal.set(Calendar.MINUTE,59);
cal.set(Calendar.SECOND,59);
cal.set(Calendar.MILLISECOND,0);

上面的工作,但如果逻辑有任何问题,我很感兴趣。 IE。它适用于二月、闰年等吗?

随时提出更好的解决方案/方法。

谢谢

最佳答案

tl;dr

get the dates for Monday and Friday last week

LocalDate                                           // Represent a date only, without a time-of-day, and without a time zone or offset.
.now // Capture the current date as seen through the wall-clock time used by the people of a certain region (a time zone).
(
ZoneId.of( "America/Montreal" )
) // Returns a `LocalDate` object.
.with // Move to another date.
(
TemporalAdjusters.previous( DayOfWeek.MONDAY ) // Returns an implementation of the `TemporalAdjuster` interface.
) // Returns another `LocalDate` object, separate and distinct from our original `LocalDate` object. Per the immutable objects design pattern.

避免遗留日期时间类

其他答案使用麻烦的旧遗留日期时间类,现在已被 java.time 问题取代。

本地日期

LocalDate类表示没有时间和时区的纯日期值。

时区对于确定日期至关重要。对于任何给定时刻,日期在全局范围内因地区而异。例如,午夜后几分钟 Paris France是新的一天,但在Montréal Québec 中仍然是“昨天” .

ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );

时间调整器

TemporalAdjuster界面提供调整以从一个日期时间值移动到另一个日期时间值。在 TemporalAdjusters 中找到方便的实现类(注意复数's')。 previous 调整器从 DayOfWeek 中找到任何指定的对象枚举。

问题没有准确定义“上周”。最后七日?标准的周一至周日时段?本地化周,例如美国的星期日至星期六?是今天的前一周还是包括今天的部分周?

我假设前 7 天是有意安排的。

LocalDate previousMonday = today.with( TemporalAdjusters.previous( DayOfWeek.MONDAY ) ) ;
LocalDate previousFriday = today.with( TemporalAdjusters.previous( DayOfWeek.FRIDAY ) ) ;

顺便说一句,如果您想要考虑初始日期(如果它恰好已经是所需的星期几),请使用替代的 TemporalAdjuster 实现:previousOrSamenextOrSame .


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 检索上周一和周五日期的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com