转换秒整数到HH:MM,iPhone

我正在为此而苦苦挣扎。 我希望以HH:MM格式在标签中显示秒数。 我在互联网上search了很多年,发现了一些答案,但是要么没有完全理解它们,要么他们看起来像是一种奇怪的做我想做的事情的方式。 如果有人能帮助我,这将是伟大的! 请记住,我是这个游戏的新手,所以这个问题可能看起来像一个真正的基本到那里更有经验。

我正在寻找你正在寻找但是找不到的东西。 所以我写了一个 –

- (NSString *)timeFormatted:(int)totalSeconds { int seconds = totalSeconds % 60; int minutes = (totalSeconds / 60) % 60; int hours = totalSeconds / 3600; return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds]; } 

Swift中完美地工作:

  func timeFormatted(totalSeconds: Int) -> String { let seconds: Int = totalSeconds % 60 let minutes: Int = (totalSeconds / 60) % 60 let hours: Int = totalSeconds / 3600 return String(format: "%02d:%02d:%02d", hours, minutes, seconds) } 

在iOS 8.0及更高版本中,也可以使用NSDateComponentsFormatter完成。 我需要提到的是,它将格式化string而不先导致零,例如“9:30”,但不是“09:30”。 但是如果您喜欢使用格式化程序,则可以使用以下代码:

 -(NSString *)getTimeStringFromSeconds:(double)seconds { NSDateComponentsFormatter *dcFormatter = [[NSDateComponentsFormatter alloc] init]; dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad; dcFormatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute; dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional; return [dcFormatter stringFromTimeInterval:seconds]; } 

这是我如何做到的:

 -(NSString *)formatTimeFromSeconds:(int)numberOfSeconds { int seconds = numberOfSeconds % 60; int minutes = (numberOfSeconds / 60) % 60; int hours = numberOfSeconds / 3600; //we have >=1 hour => example : 3h:25m if (hours) { return [NSString stringWithFormat:@"%dh:%02dm", hours, minutes]; } //we have 0 hours and >=1 minutes => example : 3m:25s if (minutes) { return [NSString stringWithFormat:@"%dm:%02ds", minutes, seconds]; } //we have only seconds example : 25s return [NSString stringWithFormat:@"%ds", seconds]; } 

对于Swift:

 func formatTimeInSec(totalSeconds: Int) -> String { let seconds = totalSeconds % 60 let minutes = (totalSeconds / 60) % 60 let hours = totalSeconds / 3600 let strHours = hours > 9 ? String(hours) : "0" + String(hours) let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) if hours > 0 { return "\(strHours):\(strMinutes):\(strSeconds)" } else { return "\(strMinutes):\(strSeconds)" } } 

虽然@Aks的答案是Swift,但我对代码中的硬编码有点怀疑。 @ edukulele的答案更清晰,但它在Objective-C中。 我把它翻译成Swift,稍作改动。 我通常写我的格式化为lazy var

 private lazy var dateFormatter: NSDateComponentsFormatter = { let formatter = NSDateComponentsFormatter() formatter.zeroFormattingBehavior = .Pad formatter.allowedUnits = [.Hour, .Minute, .Second] formatter.unitsStyle = .Positional return formatter }() 

对于Swift和时钟计数

  var timer = NSTimer() var count = 1 func updateTime() { count++ let seconds = count % 60 let minutes = (count / 60) % 60 let hours = count / 3600 let strHours = hours > 9 ? String(hours) : "0" + String(hours) let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) if hours > 0 { clockOutlet.text = "\(strHours):\(strMinutes):\(strSeconds)" } else { clockOutlet.text = "\(strMinutes):\(strSeconds)" } }