Sew*_*zki 1 java time days period seconds
如何将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
Run Code Online (Sandbox Code Playgroud)
我正在寻找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;
Run Code Online (Sandbox Code Playgroud)
正如文档中所述,Period是一段以天,月和年表示的时间段; 你的榜样是"一个月".
一个月中的秒数不是固定值.2月份有28天或29天,而12月份有31天,因此从2月12日开始的"一个月"比12月12日的"一个月"的秒数少.偶尔(比如去年),12月份有一个闰秒.根据时区和月份,可能需要额外30分钟,小时或一小时半; 进入或退出夏令时,或者比平常少得多.
你只能问"从开始这个日期在这个时区,多少秒出现在未来[期间]的时间呢?" (或者,"在[date-with-timezone]之前的最后[期间]中有多少秒?")没有参考点你不能问它,它没有意义. (您现在已更新问题以添加参考点:"now".)
如果我们引入一个参考点,那么你可以使用Temporal(LocalDateTime或者ZonedDateTime)作为你的参考点并使用它的until方法ChronoUnit.MILLIS.例如,从"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);
Run Code Online (Sandbox Code Playgroud)
当然,这可以更简洁,我想展示每一步.更简洁:
LocalDateTime start = LocalDateTime.now();
System.out.println(start.until(start.plus(Period.parse("P1M")), ChronoUnit.MILLIS));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3934 次 |
| 最近记录: |