Skip to content

Commit d2da535

Browse files
committed
Last attempt at toNanosPart
1 parent fe36335 commit d2da535

File tree

2 files changed

+79
-8
lines changed

2 files changed

+79
-8
lines changed

core/shared/src/main/scala/org/threeten/bp/Duration.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,21 @@ final class Duration private (private val seconds: Long, private val nanos: Int)
12151215
Math.addExact(result, nanos.toLong)
12161216
}
12171217

1218+
/**
1219+
* Get the nanoseconds part within seconds of the duration.
1220+
*
1221+
* The length of the duration is stored using two fields - seconds and nanoseconds. The
1222+
* nanoseconds part is a value from 0 to 999,999,999 that is an adjustment to the length in
1223+
* seconds. The total duration is defined by calling getNano() and getSeconds().
1224+
*
1225+
* This instance is immutable and unaffected by this method call.
1226+
*
1227+
* @return
1228+
* the nanoseconds within the second part of the length of the duration, from 0 to 999,999,999
1229+
* @since 9
1230+
*/
1231+
def toNanosPart: Int = nanos
1232+
12181233
/**
12191234
* Compares this duration to the specified {@code Duration}.
12201235
*

tests/shared/src/test/scala/org/threeten/bp/TestDuration.scala

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class TestDuration extends AnyFunSuite with AssertionsHelper {
195195
assertEquals(test.toDaysPart, test.toSeconds / SECONDS_PER_DAY)
196196
assertEquals(test.toMinutesPart, test.toMinutes % MINUTES_PER_HOUR)
197197
assertEquals(test.toSecondsPart, test.toSeconds % SECONDS_PER_MINUTE)
198-
assertEquals(test.getNano, Long.MaxValue % 1000000000)
198+
assertEquals(test.getNano, Long.MaxValue % 1000000000)
199199
}
200200

201201
test("factory_nanos_min") {
@@ -205,7 +205,7 @@ class TestDuration extends AnyFunSuite with AssertionsHelper {
205205
assertEquals(test.toDays, test.toSeconds / SECONDS_PER_DAY)
206206
assertEquals(test.toDaysPart, test.toSeconds / SECONDS_PER_DAY)
207207
assertEquals(test.toMinutesPart, test.toMinutes % MINUTES_PER_HOUR)
208-
assertEquals(test.getNano, Long.MinValue % 1000000000 + 1000000000)
208+
assertEquals(test.getNano, Long.MinValue % 1000000000 + 1000000000)
209209
}
210210

211211
test("factory_minutes") {
@@ -1898,18 +1898,72 @@ class TestDuration extends AnyFunSuite with AssertionsHelper {
18981898
assertEquals(Duration.ofSeconds(59).toSecondsPart, 59)
18991899
assertEquals(Duration.ofSeconds(61).toSecondsPart, 1)
19001900
assertEquals(Duration.ofSeconds(187).toSecondsPart, 7)
1901-
assertEquals(Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(88).plusMillis(234).toDaysPart, 387)
1902-
assertEquals(Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(88).plusMillis(234).toHoursPart, 18)
1903-
assertEquals(Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(38).plusMillis(234).toMinutesPart, 29)
1904-
assertEquals(Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(88).plusMillis(234).toSecondsPart, 28)
1905-
assertEquals(Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(88).plusMillis(234).toMillisPart, 234)
1901+
assertEquals(
1902+
Duration.ofDays(387).plusHours(18).plusMinutes(29).plusSeconds(88).plusMillis(234).toDaysPart,
1903+
387
1904+
)
1905+
assertEquals(Duration
1906+
.ofDays(387)
1907+
.plusHours(18)
1908+
.plusMinutes(29)
1909+
.plusSeconds(88)
1910+
.plusMillis(234)
1911+
.toHoursPart,
1912+
18
1913+
)
1914+
assertEquals(Duration
1915+
.ofDays(387)
1916+
.plusHours(18)
1917+
.plusMinutes(29)
1918+
.plusSeconds(38)
1919+
.plusMillis(234)
1920+
.toMinutesPart,
1921+
29
1922+
)
1923+
assertEquals(Duration
1924+
.ofDays(387)
1925+
.plusHours(18)
1926+
.plusMinutes(29)
1927+
.plusSeconds(88)
1928+
.plusMillis(234)
1929+
.toSecondsPart,
1930+
28
1931+
)
1932+
assertEquals(Duration
1933+
.ofDays(387)
1934+
.plusHours(18)
1935+
.plusMinutes(29)
1936+
.plusSeconds(88)
1937+
.plusMillis(234)
1938+
.plusNanos(4000)
1939+
.toNanosPart,
1940+
234004000
1941+
)
19061942
}
19071943

19081944
test("test_*_part_with_overflow") {
19091945
assertEquals(Duration.ofDays(3).plusHours(38).toDaysPart, 4)
19101946
assertEquals(Duration.ofDays(0).plusHours(18).plusMinutes(79).toHoursPart, 19)
19111947
assertEquals(Duration.ofDays(0).plusHours(18).plusMinutes(19).plusSeconds(90).toSecondsPart, 30)
1912-
assertEquals(Duration.ofDays(0).plusHours(18).plusMinutes(19).plusSeconds(90).plusMillis(10000).toSecondsPart, 40)
1948+
assertEquals(Duration
1949+
.ofDays(0)
1950+
.plusHours(18)
1951+
.plusMinutes(19)
1952+
.plusSeconds(90)
1953+
.plusMillis(10000)
1954+
.toSecondsPart,
1955+
40
1956+
)
1957+
assertEquals(Duration
1958+
.ofDays(0)
1959+
.plusHours(18)
1960+
.plusMinutes(19)
1961+
.plusSeconds(90)
1962+
.plusMillis(10000)
1963+
.plusNanos(666666)
1964+
.toNanosPart,
1965+
666666
1966+
)
19131967
}
19141968

19151969
test("test_negated_overflow") {
@@ -1938,11 +1992,13 @@ class TestDuration extends AnyFunSuite with AssertionsHelper {
19381992
test("test_toNanos") {
19391993
val test: Duration = Duration.ofSeconds(321, 123456789)
19401994
assertEquals(test.toNanos, 321123456789L)
1995+
assertEquals(test.toNanosPart, 123456789L)
19411996
}
19421997

19431998
test("test_toNanos_max") {
19441999
val test: Duration = Duration.ofSeconds(0, Long.MaxValue)
19452000
assertEquals(test.toNanos, Long.MaxValue)
2001+
assertEquals(test.toNanosPart, 854775807L)
19462002
}
19472003

19482004
test("test_toNanos_tooBig") {

0 commit comments

Comments
 (0)