From b9b4f896145b3f751ac853ef8f73e1e00dacb06a Mon Sep 17 00:00:00 2001 From: fhasse95 <49185957+fhasse95@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:48:02 +0100 Subject: [PATCH] Bugfix: Corrected the conversion of nanoseconds to milliseconds in DateComponents --- Sources/SkipFoundation/DateComponents.swift | 2 +- Tests/SkipFoundationTests/DateTime/TestCalendar.swift | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Sources/SkipFoundation/DateComponents.swift b/Sources/SkipFoundation/DateComponents.swift index 32fb445..8919a47 100644 --- a/Sources/SkipFoundation/DateComponents.swift +++ b/Sources/SkipFoundation/DateComponents.swift @@ -219,7 +219,7 @@ public struct DateComponents : Codable, Hashable, CustomStringConvertible { cal.set(java.util.Calendar.SECOND, second) } if let nanosecond = self.nanosecond { - cal.set(java.util.Calendar.MILLISECOND, nanosecond * 1_000_000) + cal.set(java.util.Calendar.MILLISECOND, nanosecond / 1_000_000) } return cal diff --git a/Tests/SkipFoundationTests/DateTime/TestCalendar.swift b/Tests/SkipFoundationTests/DateTime/TestCalendar.swift index 8a9e467..bb5ec20 100644 --- a/Tests/SkipFoundationTests/DateTime/TestCalendar.swift +++ b/Tests/SkipFoundationTests/DateTime/TestCalendar.swift @@ -307,13 +307,17 @@ class TestCalendar: XCTestCase { func test_addingComponents() { let calendar = Calendar(identifier: Calendar.Identifier.gregorian) - let thisDay = calendar.date(from: DateComponents(year: 2016, month: 10, day: 4))! + let thisDay = calendar.date(from: DateComponents(year: 2016, month: 10, day: 4, hour: 1, minute: 2, second: 3, nanosecond: 4))! let dayAfter = calendar.date(byAdding: .day, value: 1, to: thisDay) - let dayAfterComponents = calendar.dateComponents(Set([Calendar.Component.year, Calendar.Component.month, Calendar.Component.day]), from: dayAfter!) + let dayAfterComponents = calendar.dateComponents(Set([Calendar.Component.year, Calendar.Component.month, Calendar.Component.day, Calendar.Component.hour, Calendar.Component.minute, Calendar.Component.second, Calendar.Component.nanosecond]), from: dayAfter!) XCTAssertEqual(dayAfterComponents.year, 2016) XCTAssertEqual(dayAfterComponents.month, 10) XCTAssertEqual(dayAfterComponents.day, 5) + XCTAssertEqual(dayAfterComponents.hour, 1) + XCTAssertEqual(dayAfterComponents.minute, 2) + XCTAssertEqual(dayAfterComponents.second, 3) + XCTAssertEqual(dayAfterComponents.nanosecond, 0) } func test_matchesComponents() {