NSDateComponentsFormatterの動作がちょっと変わっています。時間間隔によっては結果に時間がかかります。NSDateComponentsFormatterはさらに時間を追加します
私は、1年間の時間間隔では「うるう時間」を追加することができますが、この場合は5日という短い時間間隔が5日と1時間の結果になることがわかります。
は、このテストケースを考えてみましょう:
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時間を追加することを回避する方法を見つけるのを助けることができますか?
ありがとうございます!
マリス
夏時間にようこそ。これはヨーロッパです。つまり、夏時間の変更から約3〜4日です。 – Sulthan
OK、私は理解できますが、夏時間は現在の日付との相対的なものです。ただし、時間間隔は現在の日付とは関係ありません。そうでなければ、私が5日間のプロジェクトに取り組んだと仮定すると、ある特定の瞬間に、この数字を見ると、私は5日間と1時間のプロジェクトに取り組んだことがわかります。どういうわけか不一致です... – Maris