Java 在给定LocalDate时,如何获取一天的结束时间?

Java 在给定LocalDate时,如何获取一天的结束时间?,java,java-time,Java,Java Time,在给定LocalDate时,如何获取一天的结束时间 我可以这样做 LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59)); 但是,是否有一个等效的“atStartOfDay”方法用于一天的结束 LocalDate.now().atStartOfDay(); LocalDate.now().atEndOfDay(); //doesn't work 从第二天开始,减去1秒。这应该适合你 public static void main

在给定LocalDate时,如何获取一天的结束时间

我可以这样做

LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));
但是,是否有一个等效的“atStartOfDay”方法用于一天的结束

LocalDate.now().atStartOfDay();
LocalDate.now().atEndOfDay(); //doesn't work

从第二天开始,减去1秒。这应该适合你

public static void main(String[] args) {

    LocalDate date = LocalDate.now();
    LocalDateTime dt = date.atStartOfDay().plusDays(1).minusSeconds(1);
    System.out.println(dt);
}
O/p:


根据您的需要,以下是一些备选方案:

LocalDate.now().atTime(23, 59, 59);     //23:59:59
LocalDate.now().atTime(LocalTime.MAX);  //23:59:59.999999999
但是没有内置的方法


正如@JBNizet所评论的,如果您想创建一个时间间隔,您还可以使用一个到午夜的时间间隔,独占。

这些是
LocalTime
中可用的变量,注意
midnight
MIN
是相等的

LocalDate.now().atTime(LocalTime.MIDNIGHT); //00:00:00.000000000
LocalDate.now().atTime(LocalTime.MIN);      //00:00:00.000000000
LocalDate.now().atTime(LocalTime.NOON);     //12:00:00.000000000
LocalDate.now().atTime(LocalTime.MAX);      //23:59:59.999999999
这是
java.time.LocalTime

/**
 * Constants for the local time of each hour.
 */
private static final LocalTime[] HOURS = new LocalTime[24];
static {
    for (int i = 0; i < HOURS.length; i++) {
        HOURS[i] = new LocalTime(i, 0, 0, 0);
    }
    MIDNIGHT = HOURS[0];
    NOON = HOURS[12];
    MIN = HOURS[0];
    MAX = new LocalTime(23, 59, 59, 999_999_999);
}
/**
*每小时本地时间的常数。
*/
私有静态最终本地时间[]小时=新本地时间[24];
静止的{
对于(int i=0;i
如果分配给
LocalTime
(表示
nanoofs秒
)的第四个构造函数参数(
999\u 999
)的值看起来不熟悉,那是因为它使用了Java 7功能

在JavaSE7及更高版本中,数字文字中数字之间的任意位置都可以出现任意数量的下划线字符(33;)。例如,此功能使您能够以数字文字分隔数字组,这可以提高代码的可读性


你说的“一天的结束”是什么意思?第二天的开始减去1秒?1毫秒?1纳秒?为什么不使用第二天的开始,并使用
[day,day+1[
interval?当商店从上午8点到下午6点营业时,显示的结束时间是下午6点,而不是下午5:59:59。这个答案还包含一个分区日期时间的解决方案夏令时呢?@mateusvicari LocalDate/LocalDateTime没有时区,因此没有DST规则。不确定你在问什么。注意这是1秒,不是一毫秒,我知道我建议你反对这种黑客行为
/**
 * Constants for the local time of each hour.
 */
private static final LocalTime[] HOURS = new LocalTime[24];
static {
    for (int i = 0; i < HOURS.length; i++) {
        HOURS[i] = new LocalTime(i, 0, 0, 0);
    }
    MIDNIGHT = HOURS[0];
    NOON = HOURS[12];
    MIN = HOURS[0];
    MAX = new LocalTime(23, 59, 59, 999_999_999);
}
public static long getStartOfDay(String country) {
    return LocalDate.now().atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli();
}

public static long getEndOfDay(long startOfDay) {
    return startOfDay + 86399000L;  // adding 24h = 1day seconds - 1
}

public static long getStartOfDay(LocalDate localDate, String country) {
    return localDate.atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli();
}

public static long getEndOfDay(LocalDate localDate, String country) {
    localDate = localDate.plusDays(1L);
    return localDate.atStartOfDay(ZoneId.of("Europe/Berlin")).toInstant().toEpochMilli() - 1000L; //substract mili
}