私はこれに苦労しています。 HH:MM形式のラベルに表示したい秒単位の値があります。私は何年もインターネットを検索し、いくつかの答えを見つけましたが、それらを完全に理解していないか、私が望むことをする奇妙な方法のようです。誰かが私にこれを手伝ってくれるなら、それは素晴らしいことです!私はこのゲームに慣れていないので、この質問は実際に経験を積んだ人には本当に基本的な質問のように思えるかもしれません。
あなたが探しているのと同じものを探していましたが、見つけられませんでした。だから私は1つを書いた-
- (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
でも実行できます。 「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 ' answer for Swiftは動作しますが、コード内の値のハードコーディングについては少し懐疑的です。@ edukuleleの answer はかなりよりクリーンですが、Objective-Cにあります。私はそれをSwiftにわずかな変更を加えて翻訳しました。通常、フォーマッタはlazy var
s。
private lazy var dateFormatter: NSDateComponentsFormatter = {
let formatter = NSDateComponentsFormatter()
formatter.zeroFormattingBehavior = .Pad
formatter.allowedUnits = [.Hour, .Minute, .Second]
formatter.unitsStyle = .Positional
return formatter
}()
For Swift with clock count
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)"
}
}