Я нашел довольно странное поведение NSDateComponentsFormatter - на некоторые промежутки времени он просто добавляет дополнительный час к результату.NSDateComponentsFormatter добавляет дополнительный час
Я предполагаю, что для временных интервалов более 1 года он может добавить «скачок високосного хода», но в этом случае я вижу, что промежуток времени, равный 5 дням, составляет 5 дней и один час.
Рассмотрим тестовый пример:
func testStringFromTimeInterval()
{
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Positional
formatter.allowedUnits = [.Year, .Month, .WeekOfMonth, .Day, .Hour, .Minute]
XCTAssertEqual(formatter.stringFromTimeInterval(3600) ?? "", "1:00") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval(3600*24) ?? "", "1d 0:00") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval(3600*24*5) ?? "", "5d 0:00") // Fail: actual "5d 1:00"
XCTAssertEqual(formatter.stringFromTimeInterval(3600*24*365) ?? "", "1y 0m 0w 0d 0:00") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval((3600*24*365)+60) ?? "", "1y 0m 0w 0d 0:01") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval((3600*24*365)+3600) ?? "", "1y 0m 0w 0d 1:00") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval((3600*24*365)+(3600*24)) ?? "", "1y 0m 0w 1d 0:00") // Pass
XCTAssertEqual(formatter.stringFromTimeInterval((3600*24*365)+(3600*24*5)) ?? "", "1y 0m 0w 5d 0:00") // Fail: actual "1y 0m 0w 5d 1:00"
}
Можете ли вы помочь найти способ избежать, добавив, что 1 час?
Спасибо!
Maris
Добро пожаловать в летнее время ... Это март, и вы, вероятно, в Европе. Это означает, что вы в течение 3-4 дней сменили переход на летнее время. – Sulthan
ОК, я могу это понять, но летнее время относительно текущей даты. Однако интервал времени не должен быть привязан к текущей дате. В противном случае, если я предполагаю, что я работал над проектом 5 дней, то в определенный момент времени, когда я посмотрю на это число, я увижу, что я работал над проектом 5 дней и 1 час. Как-то непоследовательно ... – Maris