如何将java.time.Period转换为秒?
以下代码会产生意外结果
java.time.Period period = java.time.Period.parse( "P1M" );
final long days = period.get( ChronoUnit.DAYS ); // produces 0
final long seconds = period.get( ChronoUnit.SECONDS ); // throws exception
我正在寻找与以下内容相同的Java 8:
// import javax.xml.datatype.DatatypeFactory;
// import javax.xml.datatype.Duration;
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
Duration d1 = datatypeFactory.newDuration( "P1M" );
final long sec = d1.getTimeInMillis( new Date() ) / 1000;
答案 0 :(得分:8)
正如the documentation中所述,Period
是以天,月和年表示的一段时间;你的例子是“一个月。”
一个月内的秒数不是固定值。 2月份有28天或29天,而12月份有31天,因此从2月12日开始的“一个月”比12月12日的“一个月”的秒数少。偶尔(比如去年),12月份有一个闰秒。根据时区和月份,可能需要额外30分钟,小时或一小时半;由于进入或退出夏令时,所以或者比往常少得多。
您只能在此时区中询问“从此日期开始,在下一个[期间]的时间内会有多少秒?” (或者,“在[date-with-timezone]之前的最后[期间]中有多少秒?”)没有参考点你不能问它,它没有意义。 (您现在已更新问题以添加参考点:“现在”。)
如果我们引入参考点,那么您可以使用Temporal
(例如LocalDateTime
或ZonedDateTime
)作为参考点,并使用until
方法ChronoUnit.MILLIS
3}}。例如,从“now”开始的当地时间:
LocalDateTime start = LocalDateTime.now();
Period period = Period.parse("P1M");
LocalDateTime end = start.plus(period);
long milliseconds = start.until(end, ChronoUnit.MILLIS);
System.out.println(milliseconds);
当然,这可以更简洁,我想展示每一步。更简洁:
LocalDateTime start = LocalDateTime.now();
System.out.println(start.until(start.plus(Period.parse("P1M")), ChronoUnit.MILLIS));
答案 1 :(得分:-1)
" get"方法只接受ChronoUnit.YEARS,ChronoUnit.MONTHS和ChronoUnit.DAYS。