< prev index next >

src/java.base/share/classes/java/time/Duration.java

Print this page


   1 /*
   2  * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


1197      * @since 9
1198      */
1199     public long toSeconds() {
1200         return seconds;
1201     }
1202 
1203     /**
1204      * Converts this duration to the total length in milliseconds.
1205      * <p>
1206      * If this duration is too large to fit in a {@code long} milliseconds, then an
1207      * exception is thrown.
1208      * <p>
1209      * If this duration has greater than millisecond precision, then the conversion
1210      * will drop any excess precision information as though the amount in nanoseconds
1211      * was subject to integer division by one million.
1212      *
1213      * @return the total length of the duration in milliseconds
1214      * @throws ArithmeticException if numeric overflow occurs
1215      */
1216     public long toMillis() {
1217         long millis = Math.multiplyExact(seconds, 1000);
1218         millis = Math.addExact(millis, nanos / 1000_000);








1219         return millis;
1220     }
1221 
1222     /**
1223      * Converts this duration to the total length in nanoseconds expressed as a {@code long}.
1224      * <p>
1225      * If this duration is too large to fit in a {@code long} nanoseconds, then an
1226      * exception is thrown.
1227      *
1228      * @return the total length of the duration in nanoseconds
1229      * @throws ArithmeticException if numeric overflow occurs
1230      */
1231     public long toNanos() {
1232         long totalNanos = Math.multiplyExact(seconds, NANOS_PER_SECOND);
1233         totalNanos = Math.addExact(totalNanos, nanos);








1234         return totalNanos;
1235     }
1236 
1237     /**
1238      * Extracts the number of days in the duration.
1239      * <p>
1240      * This returns the total number of days in the duration by dividing the
1241      * number of seconds by 86400.
1242      * This is based on the standard definition of a day as 24 hours.
1243      * <p>
1244      * This instance is immutable and unaffected by this method call.
1245      *
1246      * @return the number of days in the duration, may be negative
1247      * @since 9
1248      */
1249     public long toDaysPart(){
1250         return seconds / SECONDS_PER_DAY;
1251     }
1252 
1253     /**


   1 /*
   2  * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


1197      * @since 9
1198      */
1199     public long toSeconds() {
1200         return seconds;
1201     }
1202 
1203     /**
1204      * Converts this duration to the total length in milliseconds.
1205      * <p>
1206      * If this duration is too large to fit in a {@code long} milliseconds, then an
1207      * exception is thrown.
1208      * <p>
1209      * If this duration has greater than millisecond precision, then the conversion
1210      * will drop any excess precision information as though the amount in nanoseconds
1211      * was subject to integer division by one million.
1212      *
1213      * @return the total length of the duration in milliseconds
1214      * @throws ArithmeticException if numeric overflow occurs
1215      */
1216     public long toMillis() {
1217         long tempSeconds = seconds;
1218         long tempNanos = nanos;
1219         if (tempSeconds < 0) {
1220             // change the seconds and nano value to
1221             // handle Long.MIN_VALUE case
1222             tempSeconds = tempSeconds + 1;
1223             tempNanos = tempNanos - 1000_000_000L;
1224         }
1225         long millis = Math.multiplyExact(tempSeconds, 1000);
1226         millis = Math.addExact(millis, tempNanos / 1000_000);
1227         return millis;
1228     }
1229 
1230     /**
1231      * Converts this duration to the total length in nanoseconds expressed as a {@code long}.
1232      * <p>
1233      * If this duration is too large to fit in a {@code long} nanoseconds, then an
1234      * exception is thrown.
1235      *
1236      * @return the total length of the duration in nanoseconds
1237      * @throws ArithmeticException if numeric overflow occurs
1238      */
1239     public long toNanos() {
1240         long tempSeconds = seconds;
1241         long tempNanos = nanos;
1242         if (tempSeconds < 0) {
1243             // change the seconds and nano value to
1244             // handle Long.MIN_VALUE case
1245             tempSeconds = tempSeconds + 1;
1246             tempNanos = tempNanos - 1000_000_000L;
1247         }
1248         long totalNanos = Math.multiplyExact(tempSeconds, NANOS_PER_SECOND);
1249         totalNanos = Math.addExact(totalNanos, tempNanos);
1250         return totalNanos;
1251     }
1252 
1253     /**
1254      * Extracts the number of days in the duration.
1255      * <p>
1256      * This returns the total number of days in the duration by dividing the
1257      * number of seconds by 86400.
1258      * This is based on the standard definition of a day as 24 hours.
1259      * <p>
1260      * This instance is immutable and unaffected by this method call.
1261      *
1262      * @return the number of days in the duration, may be negative
1263      * @since 9
1264      */
1265     public long toDaysPart(){
1266         return seconds / SECONDS_PER_DAY;
1267     }
1268 
1269     /**


< prev index next >