LocalTime.MIDNIGHT 与 LocalTime.MIN - 有什么区别吗?
LocalTime.MIDNIGHT vs. LocalTime.MIN - is there any difference?
我最近使用 LocalDate.atStartOfDay()
和 LocalDate.atTime(LocalTime.MIN)
回答了一些问题。
我想知道为什么没有 LocalDate.atEndOfDay()
或类似的东西,所以必须使用 LocalDate.atTime(LocalTime.MAX)
才能获得特定日期的最后一刻(我认为以纳米为单位)。
我查看了 LocalDate
和 LocalTime
的来源,对此感到有点困惑:
/**
* Combines this date with the time of midnight to create a {@code LocalDateTime}
* at the start of this date.
* <p>
* This returns a {@code LocalDateTime} formed from this date at the time of
* midnight, 00:00, at the start of this date.
*
* @return the local date-time of midnight at the start of this date, not null
*/
public LocalDateTime atStartOfDay() {
return LocalDateTime.of(this, LocalTime.MIDNIGHT);
}
出乎我的意料,此方法 returns 一个 LocalDateTime
使用 LocalTime.MIDNIGHT
而不是 LocalTime.MIN
。
当然,我打开 OpenJDK source of 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]; // <--- == MIN
NOON = HOURS[12];
MIN = HOURS[0]; // <--- == MIDNIGHT
MAX = new LocalTime(23, 59, 59, 999_999_999);
}
虽然我完全理解 NOON
和 MAX
的存在,但我真的不明白为什么会有 MIN
和 MIDNIGHT
,而显然其中之一会足够了,因为它们具有完全相同的值。
谁能告诉我原因...
- ...有两个具有完全相同值的常量和
- ...为什么代码使用
MIDNIGHT
作为一天的开始?
是否只是为了在某些情况下更具可读性?
但为什么 LocalTime.atStartOfDay()
中不使用 MIN
而是 LocalTime.MIDNIGHT
?
MIN
的存在是为了提供最小值,与其他java.time.* 类.
一致
MIDNIGHT
的存在是为了向开发人员提供语义含义,并作为向 Javadoc 读者指示午夜被认为是一天的开始(而不是结束)的地方。
总而言之,代码阅读的语义优势超过了额外常量的成本。
(来源:我是主要java.time.*作者)
我最近使用 LocalDate.atStartOfDay()
和 LocalDate.atTime(LocalTime.MIN)
回答了一些问题。
我想知道为什么没有 LocalDate.atEndOfDay()
或类似的东西,所以必须使用 LocalDate.atTime(LocalTime.MAX)
才能获得特定日期的最后一刻(我认为以纳米为单位)。
我查看了 LocalDate
和 LocalTime
的来源,对此感到有点困惑:
/**
* Combines this date with the time of midnight to create a {@code LocalDateTime}
* at the start of this date.
* <p>
* This returns a {@code LocalDateTime} formed from this date at the time of
* midnight, 00:00, at the start of this date.
*
* @return the local date-time of midnight at the start of this date, not null
*/
public LocalDateTime atStartOfDay() {
return LocalDateTime.of(this, LocalTime.MIDNIGHT);
}
出乎我的意料,此方法 returns 一个 LocalDateTime
使用 LocalTime.MIDNIGHT
而不是 LocalTime.MIN
。
当然,我打开 OpenJDK source of 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]; // <--- == MIN
NOON = HOURS[12];
MIN = HOURS[0]; // <--- == MIDNIGHT
MAX = new LocalTime(23, 59, 59, 999_999_999);
}
虽然我完全理解 NOON
和 MAX
的存在,但我真的不明白为什么会有 MIN
和 MIDNIGHT
,而显然其中之一会足够了,因为它们具有完全相同的值。
谁能告诉我原因...
- ...有两个具有完全相同值的常量和
- ...为什么代码使用
MIDNIGHT
作为一天的开始?
是否只是为了在某些情况下更具可读性?
但为什么 LocalTime.atStartOfDay()
中不使用 MIN
而是 LocalTime.MIDNIGHT
?
MIN
的存在是为了提供最小值,与其他java.time.* 类.
MIDNIGHT
的存在是为了向开发人员提供语义含义,并作为向 Javadoc 读者指示午夜被认为是一天的开始(而不是结束)的地方。
总而言之,代码阅读的语义优势超过了额外常量的成本。
(来源:我是主要java.time.*作者)