如何在给定 LocalDate 时获得一天的结束?
How to obtain the end of the day when given a LocalDate?
给定 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 :
2016-04-04T23:59:59
根据您的需要,这里有一些备选方案:
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);
}
如果分配给 LocalTime
(代表 nanoOfSecond
)的第四个构造函数参数(999_999_999
)的值看起来不熟悉,那是因为它使用了 Java 7特征 Underscores in Numeric Literals.
In Java SE 7 and later, any number of underscore characters (_) can appear anywhere between digits in a numerical literal. This feature enables you, for example, to separate groups of digits in numeric literals, which can improve the readability of your code.
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
}
给定 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 :
2016-04-04T23:59:59
根据您的需要,这里有一些备选方案:
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);
}
如果分配给 LocalTime
(代表 nanoOfSecond
)的第四个构造函数参数(999_999_999
)的值看起来不熟悉,那是因为它使用了 Java 7特征 Underscores in Numeric Literals.
In Java SE 7 and later, any number of underscore characters (_) can appear anywhere between digits in a numerical literal. This feature enables you, for example, to separate groups of digits in numeric literals, which can improve the readability of your code.
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
}