NSTimeInterval to HH : mm : ss?
200.0으로 설정된 NSTimeInterval이 있으면 00:03:20으로 변환하는 방법이 있습니까? NSDate를 초기화 한 다음 HH : mm : ss를 사용하여 NSDateFormatter를 사용할 수 있다고 생각했습니다. 내 질문은 이것을 할 수있는 빠른 방법이 [NSString stringWithFormat: %02d:%02d:%02d, myHour, myMin, mySec]
있습니까? 아니면 직접 번호를 나누고 사용해야 합니까?
NSDateFormatter
나눗셈과 모듈로 외에는 사용할 필요가 없습니다 . NSTimeInterval
초를 포함하는 두 배입니다.
빠른
func stringFromTimeInterval(interval: NSTimeInterval) -> String {
let interval = Int(interval)
let seconds = interval % 60
let minutes = (interval / 60) % 60
let hours = (interval / 3600)
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
목표 -C
- (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {
NSInteger ti = (NSInteger)interval;
NSInteger seconds = ti % 60;
NSInteger minutes = (ti / 60) % 60;
NSInteger hours = (ti / 3600);
return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", (long)hours, (long)minutes, (long)seconds];
}
iOS 8에서는 NSDateComponentsFormatter
.
NSDateComponentsFormatter *dateComponentsFormatter = [[NSDateComponentsFormatter alloc] init];
NSLog(@"%@", [dateComponentsFormatter stringFromTimeInterval:200.0]);
"3:20"을 출력합니다.
NSDateComponentsFormatter *dateComponentsFormatter = [[NSDateComponentsFormatter alloc] init];
dateComponentsFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
dateComponentsFormatter.allowedUnits = (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond);
NSLog(@"%@", [dateComponentsFormatter stringFromTimeInterval:200.0]);
"0:03:20"을 출력합니다.
onmyway133 의 답변 의 Swift 3 버전 :
import Foundation
func format(_ duration: TimeInterval) -> String {
let formatter = DateComponentsFormatter()
formatter.zeroFormattingBehavior = .pad
formatter.allowedUnits = [.minute, .second]
if duration >= 3600 {
formatter.allowedUnits.insert(.hour)
}
return formatter.string(from: duration)!
}
print(format(12)) // 0:12
print(format(65)) // 1:05
print(format(1750)) // 29:10
print(format(3890)) // 1:04:50
print(format(45720)) // 12:42:00
몇 줄의 추가 코드가 있지만 NSDateComponents를 사용하면 더 정확한 값을 얻을 수 있습니다.
- (NSString *)getTimeRepresentationFromDate:(NSDate *)iDate withTimeInterval:(NSTimeInterval)iTimeInterval {
NSString *aReturnValue = nil;
NSDate *aNewDate = [iDate dateByAddingTimeInterval:iTimeInterval];
unsigned int theUnits = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSCalendar *aCalender = [NSCalendar currentCalendar];
NSDateComponents *aDateComponents = [aCalender components:theUnits fromDate:iDate toDate:aNewDate options:0];
aReturnValue = [NSString stringWithFormat:@"%d:%d:%d", [aDateComponents hour], [aDateComponents minute], [aDateComponents second]];
return aReturnValue;
}
에서 스위프트 2 , 아이폰 OS 8 이상 . 이렇게하면 필요할 때만 시간이 표시됩니다.
func format(duration: NSTimeInterval) -> String {
let formatter = NSDateComponentsFormatter()
formatter.zeroFormattingBehavior = .Pad
if duration >= 3600 {
formatter.allowedUnits = [.Hour, .Minute, .Second]
} else {
formatter.allowedUnits = [.Minute, .Second]
}
return formatter.stringFromTimeInterval(duration) ?? ""
}
그래서 당신은
print(format(12)) // 0:12
print(format(65)) // 1:05
print(format(1750)) // 29:10
print(format(3890)) // 1:04:50
print(format(45720)) // 12:42:00
NSTimeInterval ti = 3667;
double hours = floor(ti / 60 / 60);
double minutes = floor((ti - (hours * 60 * 60)) / 60);
double seconds = floor(ti - (hours * 60 * 60) - (minutes * 60));
Matthias Bauch의 제안을 "확장"하기 위해 Swift에서 저는 이것을 NSTimeInterval의 계산 된 속성으로 만들 것입니다.
extension NSTimeInterval {
var stringValue: String {
let interval = Int(self)
let seconds = interval % 60
let minutes = (interval / 60) % 60
let hours = (interval / 3600)
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
}
이것의 장점은 NSTimeInterval
뷰 컨트롤러가 아닌 유형에 연결되어 있거나 해당 기능을 배치하는 곳에 연결된다는 것입니다. 사용하려면 다음과 같이 가십시오.
let timeInterval = NSDate().timeIntervalSinceDate(start)
self.elapsedTimeLabel.text = timeInterval.stringValue
스위프트 4
DateComponentsFormatter().string(from: <# TimeInterval #>)
전의:
DateComponentsFormatter().string(from: 59.0)
@ onmyway133의 답변에 따라 Swift 4 버전은 다음과 같습니다.
func format(duration: TimeInterval) -> String {
let formatter = DateComponentsFormatter()
formatter.zeroFormattingBehavior = .pad
if duration >= 3600 {
formatter.allowedUnits = [.hour, .minute, .second];
} else {
formatter.allowedUnits = [.minute, .second];
}
return formatter.string(from: duration) ?? "";
}
애플 문서에서 바로 : h 파일에서 :
@property(strong,nonatomic)NSDateComponentsFormatter *timerFormatter;
m 파일에서
@synthesize timerFormatter;
- (void)viewDidLoad {
[super viewDidLoad];
NSDateComponentsFormatter *timerFormatter = [[NSDateComponentsFormatter alloc] init];
timerFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional;
//10:59 Positional THIS ONE DOES NOT SEEM TO WORK iOS<9 WHEN <1Minute JUST SHOWS 01, 10m 59s Abbreviated, 10min 59sec Short, 10minutes 59seconds Full ...
timerFormatter.allowedUnits = NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
}
NSTimeInterval timeInterval을 hh : mm : ss 문자열로 변환해야 할 때마다 다음을 수행하십시오.
NSString *txt=[timerFormatter stringFromTimeInterval:timeInterval];
나는 타이머 분수가 중단되어야한다고 생각한다. Matthias의 코드가이 문제를 몇 초 만에 생성했기 때문에 Matthias의 코드에서 약간 수정 된 다음을 사용합니다.
- (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {
int ti = (int) ceil(interval);
int seconds = ti % 60;
int minutes = (ti / 60) % 60;
int hours = (ti / 3600);
return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds];
}
Objective C version of onmyway133's answer
- (NSString*) formatTimeInterval:(NSTimeInterval) timeInterval {
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
if (timeInterval > 3600) {
formatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
} else {
formatter.allowedUnits = NSCalendarUnitMinute | NSCalendarUnitSecond;
}
return [formatter stringFromTimeInterval:timeInterval];
}
참고URL : https://stackoverflow.com/questions/4933075/nstimeinterval-to-hhmmss
'developer tip' 카테고리의 다른 글
자바 스크립트로 현재 시간 형식 지정 (0) | 2020.10.06 |
---|---|
Elmah가 asp.net 사이트에서 작동하지 않음 (0) | 2020.10.06 |
센터 (0) | 2020.10.06 |
필수 속성 HTML5 (0) | 2020.10.06 |
if 문과 if-else 문 중 어느 것이 더 빠릅니까? (0) | 2020.10.06 |