Swift를 사용하여 정수인 NSDates 간의 차이(초) 찾기
버튼을 누른 시간을 측정하고 싶은 코드를 작성하고 있습니다. 위해서 을을 했습니다.NSDate()
을,을을때e때g을en,을고을sndd,dtimeIntervalSinceDate
버튼을 해제했을 때의 기능.그건 될 것 같은데 결과를 출력하거나 정수로 바꿀 방법을 찾을 수가 없네요.
var timeAtPress = NSDate()
@IBAction func pressed(sender: AnyObject) {
println("pressed")
timeAtPress = NSDate()
}
@IBAction func released(sender: AnyObject) {
println("released")
var elapsedTime = NSDate.timeIntervalSinceDate(timeAtPress)
duration = ???
}
비슷한 질문을 몇 개 보았지만, C를 몰라서 주어진 답을 이해하는 데 어려움을 겪었습니다.버튼을 누른 시간을 파악할 수 있는 더 효율적인 방법이 있다면 제안을 받을 수 있습니다.
의 는 는 을 의 시도.elapsedTime
◦ 과 같습니다스위프트 3에서는 다음과 같습니다.
let elapsed = Date().timeIntervalSince(timeAtPress)
를 합니다.()
e 이후에Date
참조, 를 호출합니다.
또는 요즘은 (예: iOS 15+, macOS 12+) 기능을 사용하는 것을 선호할 수도 있는데, 이는 정확히 동일한 작업을 수행하지만 이름을 통해 기능적 의도를 명시합니다.
let elapsed = Date.now.timeIntervalSince(timeAtPress)
Date()
/Date.init()
/Date.now
개체를 새를한음짜음한timeIntervalSince
과의를다것 사이의 합니다.timeAtPress
값a. 으로는 됩니다 ( a))이 반환됩니다.TimeInterval
).
이 을 로 로 이 을 Int
value,을할수다다수을 사용하면 됩니다.
let duration = Int(elapsed)
몇 가지 대안이 있습니다.
요즘은 (iOS 16+, macOS 13+) a를 사용할 수도 있습니다.
let clock = ContinuousClock() let start = clock.now // do something let elapsed = .now - start
또는 작업에 소요되는 시간을 측정할 수 있습니다.
// for async routines let elapsed = try await ContinuousClock().measure { // something asynchronous with `await` } // for synchronous routines let elapsed = ContinuousClock().measure { // something synchronous }
이 시계들은 WWDC 2022 비디오 Meet Swift Async Algorithms에 약 6분간 소개됩니다.
때때로 우리는 단지 다음과 같이 경과된 시간(초)만을 원합니다.
let start = CFAbsoluteTimeGetCurrent() // do something let elapsed = CFAbsoluteTimeGetCurrent() - start
이 문서는 다음과 같이 경고하고 있음을 유의할 필요가 있습니다.
이 기능에 반복적으로 호출한다고 해서 단조롭게 증가하는 결과가 보장되는 것은 아닙니다.시스템 시간은 외부 시간 기준과 동기화되거나 클럭의 명시적인 사용자 변경으로 인해 감소할 수 있습니다.
이는 이러한 조정 중 하나를 수행할 때 경과 시간을 측정할 수 없을 정도로 불행한 경우 잘못된 경과 시간 계산으로 끝날 수 있음을 의미합니다.에 해당됩니다.
NSDate
/Date
계산도 그렇고요.A를 사용하는 것이 가장 안전합니다.mach_absolute_time
기반 계산(가장 쉽게 사용):let start = CACurrentMediaTime() // do something let elapsed = CACurrentMediaTime() - start
사용합니다.
mach_absolute_time
, 그러나 기술 Q&A QA1398에 설명된 복잡성의 일부는 피합니다.하지만, 기억하세요.
CACurrentMediaTime
/mach_absolute_time
디바이스가 재부팅되면 재설정됩니다.따라서 앱이 실행되는 동안 정확한 경과 시간 계산이 필요하다면 다음을 사용합니다.CACurrentMediaTime
. 하지만 이 시작 시간을 나중에 앱을 다시 시작할 때 기억할 수 있는 영구 저장소에 저장하려면 다음을 사용해야 합니다.Date
아니면CFAbsoluteTimeGetCurrent
, 그리고 혹시라도 있을 법한 부정확함을 감수하고 살아가세요.
스위프트 5
let differenceInSeconds = Int(endDate.timeIntervalSince(startDate))
NSDate()와 NSCalendar()는 좋은 선택인 것 같습니다.달력 계산을 사용하고 실제 연산 부분은 프레임워크에 맡깁니다.다음은 2개 사이의 초를 얻는 간단한 예입니다.NSDate()
let startDate = NSDate()
let endDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let dateComponents = calendar.components(NSCalendarUnit.CalendarUnitSecond, fromDate: startDate, toDate: endDate, options: nil)
let seconds = dateComponents.second
println("Seconds: \(seconds)")
프레디의 대답에 따르면 스위프트 3의 기능은 다음과 같습니다.
let start = Date()
let end = Date(timeIntervalSince1970: 100)
let calendar = Calendar.current
let unitFlags = Set<Calendar.Component>([ .second])
let datecomponents = calendar.dateComponents(unitFlags, from: start, to: end)
let seconds = datecomponents.second
print(String(describing: seconds))
이것이 스위프트 3의 최신 버전에서 차이를 얻을 수 있는 방법입니다.
let calendar = NSCalendar.current
var compos:Set<Calendar.Component> = Set<Calendar.Component>()
compos.insert(.second)
compos.insert(.minute)
let difference = calendar.dateComponents(compos, from: fromDate, to: toDate)
print("diff in minute=\(difference.minute!)") // difference in minute
print("diff in seconds=\(difference.second!)") // difference in seconds
참조:두 NSD 날짜 간의 차이(개월/일/시간/분/초) 가져오기
"hh:mm"에서 2시간 사이의 스위프트 3초의 경우
func secondsIn(_ str: String)->Int{
var strArr = str.characters.split{$0 == ":"}.map(String.init)
var sec = Int(strArr[0])! * 3600
var sec1 = Int(strArr[1])! * 36
print("sec")
print(sec+sec1)
return sec+sec1
}
사용.
var sec1 = secondsIn(shuttleTime)
var sec2 = secondsIn(dateToString(Date()))
print(sec1-sec2)
언급URL : https://stackoverflow.com/questions/26599172/find-difference-in-seconds-between-nsdates-as-integer-using-swift
'programing' 카테고리의 다른 글
HTML에서 PDF를 생성하기 위해 wkhtmltopdf 호출 (0) | 2023.09.09 |
---|---|
jQuery: 버튼을 제외한 첫번째 보이는 입력/선택/텍스트 영역을 찾는 방법? (0) | 2023.09.09 |
타임스탬프 열의 모든 값을 한 번에 편집하려면 어떻게 해야 합니까? (0) | 2023.09.09 |
@도식 전반에 걸쳐 많은 ToOne이 잘못된 FK를 만듭니다. (0) | 2023.09.09 |
요소에 두 클래스가 모두 있는 경우에만 적용할 CSS 규칙 (0) | 2023.09.09 |