아이폰: 현재 밀리초를 얻는 방법은?
현재 시스템 시간(밀리초)을 가져오는 가장 좋은 방법은 무엇입니까?
상대적인 타이밍(예: 게임 또는 애니메이션)에 이 기능을 사용하는 경우에는 차라리 CACurrentMediaTime()을 사용합니다.
double CurrentTime = CACurrentMediaTime();
권장되는 방법은 무엇입니까?NSDate
네트워크 동기화 클럭을 사용하여 네트워크에 대해 다시 동기화할 때 가끔 딸꾹질이 발생합니다.
현재 절대 시간(초)을 반환합니다.
소수 부분만 원하는 경우(애니메이션 동기화 시 자주 사용됨),
let ct = CACurrentMediaTime().truncatingRemainder(dividingBy: 1)
[[NSDate date] timeIntervalSince1970];
epoch 이후의 초 수를 더블로 반환합니다.저는 여러분이 분수 부분에서 밀리초에 접근할 수 있다고 거의 확신합니다.
iPhone 4S 및 iPad 3(릴리스 빌드)에서 다른 모든 답변을 벤치마킹했습니다. CACurrentMediaTime
약간의 차이로 가장 적은 오버헤드를 가집니다. timeIntervalSince1970
다른 것들보다 훨씬 느립니다, 아마도 그것 때문일 것입니다.NSDate
인스턴스화 오버헤드(대부분의 사용 사례에서는 문제가 되지 않을 수 있음).
추천합니다CACurrentMediaTime
최소한의 오버헤드를 원하며 Quartz Framework 종속성을 추가하는 것을 개의치 않으신다면.또는gettimeofday
휴대성이 당신의 우선순위라면.
아이폰 4S
CACurrentMediaTime: 1.33 µs/call
gettimeofday: 1.38 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.45 µs/call
CFAbsoluteTimeGetCurrent: 1.48 µs/call
[[NSDate date] timeIntervalSince1970]: 4.93 µs/call
아이패드 3
CACurrentMediaTime: 1.25 µs/call
gettimeofday: 1.33 µs/call
CFAbsoluteTimeGetCurrent: 1.34 µs/call
[NSDate timeIntervalSinceReferenceDate]: 1.37 µs/call
[[NSDate date] timeIntervalSince1970]: 3.47 µs/call
스위프트에서 우리는 함수를 만들고 다음과 같이 할 수 있습니다.
func getCurrentMillis()->Int64{
return Int64(NSDate().timeIntervalSince1970 * 1000)
}
var currentTime = getCurrentMillis()
Swift 3.0에서는 잘 작동하지만 우리는 수정하고 사용할 수 있습니다.Date
대신 수업을 하다NSDate
3.0으로
스위프트 3.0
func getCurrentMillis()->Int64 {
return Int64(Date().timeIntervalSince1970 * 1000)
}
var currentTime = getCurrentMillis()
현재 날짜에 대한 밀리초를 가져옵니다.
Swift 4+:
func currentTimeInMilliSeconds()-> Int
{
let currentDate = Date()
let since1970 = currentDate.timeIntervalSince1970
return Int(since1970 * 1000)
}
지금까지 내가 찾은 것은gettimeofday
간격 평가(예: 프레임 속도, 렌더링 프레임의 타이밍...)를 수행하려는 경우 iOS(iPad)에서 좋은 솔루션:
#include <sys/time.h>
struct timeval time;
gettimeofday(&time, NULL);
long millis = (time.tv_sec * 1000) + (time.tv_usec / 1000);
스위프트 2
let seconds = NSDate().timeIntervalSince1970
let milliseconds = seconds * 1000.0
스위프트 3
let currentTimeInMiliseconds = Date().timeIntervalSince1970.milliseconds
마하 기반 타이밍 함수에 대한 래퍼를 제공하는 코드 타임스탬프에 대해 아는 것이 유용할 수 있습니다.이렇게 하면 나노초 해상도 타이밍 데이터(밀리초보다 1000000x 더 정확함)를 얻을 수 있습니다.네, 백만 배 더 정확합니다.(접두사는 밀리, 마이크로, 나노이며 각 접두사는 마지막 접두사보다 1000배 더 정확합니다.)코드 타임스탬프가 필요 없는 경우에도 코드(오픈 소스)를 확인하여 마하를 사용하여 타이밍 데이터를 가져오는 방법을 확인합니다.이는 NSDate 접근 방식보다 더 정확하고 빠른 메서드 호출이 필요할 때 유용합니다.
http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/
// Timestamp after converting to milliseconds.
NSString * timeInMS = [NSString stringWithFormat:@"%lld", [@(floor([date timeIntervalSince1970] * 1000)) longLongValue]];
나는 필요했습니다.NSNumber
의 정확한 결과를 포함하는 객체[[NSDate date] timeIntervalSince1970]
이 함수는 여러 번 호출되었기 때문에 실제로 생성할 필요가 없었습니다.NSDate
객체, 성능이 좋지 않았습니다.
원래 함수가 제공하는 형식을 보려면 다음을 시도하십시오.
#include <sys/time.h>
struct timeval tv;
gettimeofday(&tv,NULL);
double perciseTimeStamp = tv.tv_sec + tv.tv_usec * 0.000001;
그것은 당신에게 정확히 같은 결과를 줄 것입니다.[[NSDate date] timeIntervalSince1970]
CFA 절대 시간현재 가져오기()
절대 시간은 2001년 1월 1일 00:00:00 GMT의 절대 기준 날짜를 기준으로 초 단위로 측정됩니다. 양수 값은 기준 날짜 이후의 날짜를 나타내고 음수 값은 기준 날짜 이전의 날짜를 나타냅니다.예를 들어 절대 시간 -32940326은 1999년 12월 16일 17:54:34와 같습니다.이 함수에 대한 반복적인 호출은 단조롭게 증가하는 결과를 보장하지 않습니다.시스템 시간은 외부 시간 기준과의 동기화 또는 클럭의 명시적인 사용자 변경으로 인해 감소할 수 있습니다.
이것은 기본적으로 Swift 3용으로 녹음된 @TristanLorach가 게시한 것과 동일한 답변입니다.
/// Method to get Unix-style time (Java variant), i.e., time since 1970 in milliseconds. This
/// copied from here: http://stackoverflow.com/a/24655601/253938 and here:
/// http://stackoverflow.com/a/7885923/253938
/// (This should give good performance according to this:
/// http://stackoverflow.com/a/12020300/253938 )
///
/// Note that it is possible that multiple calls to this method and computing the difference may
/// occasionally give problematic results, like an apparently negative interval or a major jump
/// forward in time. This is because system time occasionally gets updated due to synchronization
/// with a time source on the network (maybe "leap second"), or user setting the clock.
public static func currentTimeMillis() -> Int64 {
var darwinTime : timeval = timeval(tv_sec: 0, tv_usec: 0)
gettimeofday(&darwinTime, nil)
return (Int64(darwinTime.tv_sec) * 1000) + Int64(darwinTime.tv_usec / 1000)
}
사용해 보십시오.
NSDate * timestamp = [NSDate dateWithTimeIntervalSince1970:[[NSDate date] timeIntervalSince1970]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss.SSS"];
NSString *newDateString = [dateFormatter stringFromDate:timestamp];
timestamp = (NSDate*)newDateString;
이 예제에서는 dateWithTimeIntervalSince1970은 년, 월, 일 및 시간을 시간, 분, 초 및 밀리초로 반환하는 형식 @"YYYY-MM-dd HH:mm:ss.SSS"의 조합으로 사용됩니다.예: "2015-12-02 04:43:15.008"을 참조하십시오.NS 문자열을 사용하여 포맷이 이전에 작성되었는지 확인했습니다.
func currentmicrotimeTimeMillis() -> Int64{
let nowDoublevaluseis = NSDate().timeIntervalSince1970
return Int64(nowDoublevaluseis*1000)
}
let timeInMiliSecDate = Date()
let timeInMiliSec = Int (timeInMiliSecDate.timeIntervalSince1970 * 1000)
print(timeInMiliSec)
이것은 제가 스위프트를 위해 사용한 것입니다.
var date = NSDate()
let currentTime = Int64(date.timeIntervalSince1970 * 1000)
print("Time in milliseconds is \(currentTime)")
이 사이트를 사용하여 정확성을 확인했습니다. http://currentmillis.com/
NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); //double
long digits = (long)time; //first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); //3 missing digits
/*** long ***/
long timestamp = (digits * 1000) + decimalDigits;
/*** string ***/
NSString *timestampString = [NSString stringWithFormat:@"%ld%03d",digits ,decimalDigits];
[NSDate timeIntervalSinceReferenceDate]
Quartz 프레임워크를 포함하지 않으려면 다른 옵션입니다.초를 나타내는 두 배를 반환합니다.
언급URL : https://stackoverflow.com/questions/358207/iphone-how-to-get-current-milliseconds
'programing' 카테고리의 다른 글
앵커 요소가 이동할 때 WPF 팝업을 이동하려면 어떻게 해야 합니까? (0) | 2023.05.10 |
---|---|
지속성을 위한 Redis Cache 및 Mongo용 아키텍처 (0) | 2023.05.10 |
__dirname이(가) 노드 REPL에 정의되지 않은 이유는 무엇입니까? (0) | 2023.05.10 |
현지화를 위해 Android 문자열 리소스를 Excel로 가져오거나 내보내는 방법은 무엇입니까? (0) | 2023.05.05 |
<%, <%@, <%=, <%#... 무슨 일입니까? (0) | 2023.05.05 |