@@ -215,6 +215,7 @@ class TestNSDateComponents: XCTestCase {
215
215
( " test_hash " , test_hash) ,
216
216
( " test_copyNSDateComponents " , test_copyNSDateComponents) ,
217
217
( " test_dateDifferenceComponents " , test_dateDifferenceComponents) ,
218
+ ( " test_nanoseconds " , test_nanoseconds) ,
218
219
]
219
220
}
220
221
@@ -429,4 +430,36 @@ class TestNSDateComponents: XCTestCase {
429
430
XCTAssertNil ( diff9. calendar)
430
431
XCTAssertNil ( diff9. timeZone)
431
432
}
433
+
434
+ func test_nanoseconds( ) throws {
435
+ // 1971-06-21 00:00:00
436
+ let date1 = Date ( timeIntervalSince1970: 46310400 )
437
+
438
+ // 1971-06-21 00:00:00.00123
439
+ let date2 = Date ( timeIntervalSince1970: 46310400.00123 )
440
+
441
+ // 1971-06-24 00:16:40:00123
442
+ let date3 = Date ( timeIntervalSince1970: 46570600.45678 )
443
+
444
+ var calendar = Calendar . current
445
+ calendar. timeZone = try TimeZone ( abbreviation: " UTC " ) . unwrapped ( )
446
+
447
+ let diff1 = calendar. dateComponents ( [ . nanosecond] , from: date1, to: date2)
448
+ XCTAssertEqual ( diff1. nanosecond, 1230003 )
449
+
450
+ let diff2 = calendar. dateComponents ( [ . nanosecond] , from: date1, to: date2)
451
+ XCTAssertEqual ( diff2. nanosecond, 1230003 )
452
+
453
+ let diff3 = calendar. dateComponents ( [ . day, . minute, . second, . nanosecond] , from: date2, to: date3)
454
+ XCTAssertEqual ( diff3. day, 3 )
455
+ XCTAssertEqual ( diff3. minute, 16 )
456
+ XCTAssertEqual ( diff3. second, 40 )
457
+ XCTAssertEqual ( diff3. nanosecond, 455549949 )
458
+
459
+ let diff4 = calendar. dateComponents ( [ . day, . minute, . second, . nanosecond] , from: date3, to: date2)
460
+ XCTAssertEqual ( diff4. day, - 3 )
461
+ XCTAssertEqual ( diff4. minute, - 16 )
462
+ XCTAssertEqual ( diff4. second, - 40 )
463
+ XCTAssertEqual ( diff4. nanosecond, - 455549950 )
464
+ }
432
465
}
0 commit comments