Return ISO-8601 时间格式(从 Java 中的大纪元开始的天数)
Return ISO-8601 time format in days from Epoch time in Java
我有一些 Java 代码,其中 return 是给定纪元时间的 ISO-8601 时间格式。
public String getISO8601(String epochTime) {
long epoch = Long.parseLong(epochTs);
ZoneId zone = ZoneId.of("Europe/London");
LocalDate then = Instant.ofEpochMilli(epoch).atZone(zone).toLocalDate();
LocalDate today = LocalDate.now(zone);
Period diff = Period.between(then, today);
return diff.toString();
}
当我将 epochTime 传递给它时:1512259200000
这个纪元时间是:Sun 2017-12-03 00:00:00
所以方法 getISO8601 将 return: P1Y
太棒了!但是有什么办法可以确保它总是并且只在几天内 return ......例如:P365D(而不是:P1Y)
Period 有一个 getDays 方法returnsPeriod 中的整数天数。
不幸的是 Period
不允许指定单位,但您可以使用 until
方法来处理此问题,指定您想要天数的差异:
public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
int days = (int) from.until(to, ChronoUnit.DAYS);
return Period.ofDays(days);
}
用它代替 Period.between
,我相信它会做你想做的事。
(第一行等同于MS90的回答中的ChronoUnit.DAYS.between(date1, date2)
,你觉得哪个更易读就用哪个吧。)
好的,请看下面的代码:
public static long countDays(LocalDate date1, LocalDate date2) {
long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
return daysInAPeriod;
}
我有一些 Java 代码,其中 return 是给定纪元时间的 ISO-8601 时间格式。
public String getISO8601(String epochTime) {
long epoch = Long.parseLong(epochTs);
ZoneId zone = ZoneId.of("Europe/London");
LocalDate then = Instant.ofEpochMilli(epoch).atZone(zone).toLocalDate();
LocalDate today = LocalDate.now(zone);
Period diff = Period.between(then, today);
return diff.toString();
}
当我将 epochTime 传递给它时:1512259200000
这个纪元时间是:Sun 2017-12-03 00:00:00
所以方法 getISO8601 将 return: P1Y
太棒了!但是有什么办法可以确保它总是并且只在几天内 return ......例如:P365D(而不是:P1Y)
Period 有一个 getDays 方法returnsPeriod 中的整数天数。
不幸的是 Period
不允许指定单位,但您可以使用 until
方法来处理此问题,指定您想要天数的差异:
public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
int days = (int) from.until(to, ChronoUnit.DAYS);
return Period.ofDays(days);
}
用它代替 Period.between
,我相信它会做你想做的事。
(第一行等同于MS90的回答中的ChronoUnit.DAYS.between(date1, date2)
,你觉得哪个更易读就用哪个吧。)
好的,请看下面的代码:
public static long countDays(LocalDate date1, LocalDate date2) {
long daysInAPeriod = ChronoUnit.DAYS.between(date1, date2);
return daysInAPeriod;
}