NSNumberFormatter秒到几小时,几分钟?

时间:2015-12-23 16:00:34

标签: ios objective-c time nsnumberformatter ios-charts

我正在使用Charts框架,因此我可以显示统计数据,它需要简单的数字值,例如1,5,17,99,1,574等,并在图表上绘制它们。

它可以选择设置NSNumberFormatter以更优雅地显示这些值。

我使用的数字是总秒数。例如。 660秒,1080秒。

如何使用NSNumberFormatter将我的号码显示为小时,分钟,秒,而不是纯粹的总秒数?

感谢。

3 个答案:

答案 0 :(得分:4)

如果您在谈论xAxis标签,它们是字符串,而不是数字,因此您可以直接将日期字符串传递给xAxis值。

如果你在谈论yAxis标签,你知道y轴代表数字,这就是我们绘制图表的原因。

如果您真的想这样做,您可以编写自己的NSNumberFormatter子类并覆盖stringFromNumber,手动将数字转换为您想要的时间。并将此格式化程序用于yAxis.valueFormatter

这是一个简单的数学计算,你只需要将60/3600分成几分钟或几小时。

关键是,您必须知道如何翻译数字。例如如果yAxis标签上的'60'确实意味着'60秒',否则你的图表毫无意义。

答案 1 :(得分:1)

iOS 8上提供的

DateComponentsFormatter运行良好,特别是在您希望轻松进行本地化的情况下。这里有些例子。

let duration : TimeInterval = 11735    // seconds
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute, .second]

formatter.unitsStyle = .abbreviated
let text1 = formatter.string(from: duration)     // "3h 15m 35s"

// choose a longer unit style:
formatter.unitsStyle = .short
let text2 = formatter.string(from: duration)     // "3 hr, 15 min, 35 sec"

// easy localization:
formatter.calendar?.locale = Locale(identifier: "da_DK")
let text3 = formatter.string(from: duration)     // "3 t., 15 min. og 35 sek."

// approximate to whole minutes:
formatter.calendar?.locale = Locale(identifier: "en_US")
formatter.includesApproximationPhrase = true
formatter.allowedUnits = [.hour, .minute]
let text4 = formatter.string(from: duration)     // "About 3 hr, 15 min" - (not rounding up)

// approximation AND localization (Apple has a bug to fix):
formatter.calendar?.locale = Locale(identifier: "da_DK")
formatter.includesApproximationPhrase = true
formatter.allowedUnits = [.hour, .minute]
let text5 = formatter.string(from: duration)     // "About 3 t. og 15 min." - Ugh!

答案 2 :(得分:0)

NSNumberFormatter并不适合这个。你可以用NSDateFormatter来做你想做的事情,但那些设计用于显示日期和时间,而不是像你想要的那样。

在SO上看一下关于这个主题的这个主题:

Formatting seconds into hh:ii:ss

特别是@dreamlax回答。

如果您不需要支持自动本地化,这是最简单的方法。