Swift에서 Unix Epoch Time 얻기


102

Swift의 epoch에서 초를 어떻게 얻습니까?


2
Objective-C와 동일-NSDate를 사용하십시오.
gnasher729 2014-08-02

2
Objective-C가 싫기 때문에 Apple 제품 개발을 피했습니다. 결과적으로 나는 그것을 배우지 못했습니다. 그리고 저는 Swift 구문이 적어도 약간 다르다는 것을 알고 있습니다. 구문을 보여주세요. 자신에게 쉬운 평판을 얻으십시오.
Chris Redford


3
아니요, Swift 메서드 항목에 직접 연결됩니다 - timeIntervalSince1970..
zaph

3
실제로 특정 방법에 연결했습니다. :)
Martin R

답변:


162

NSDate의 timeIntervalSince1970기능을 간단히 사용할 수 있습니다 .

let timeInterval = NSDate().timeIntervalSince1970

7
Foundation을 가져와야합니다.
AlBlue 2014-08-02

3
재단을 사용하지 않고 어떻습니까?
marius

3
당신이 기초를 사용하지 않는 경우에 당신은 AFNetworking / AlamoFire (사용할 수 github.com/Alamofire/Alamofire을 로드) currentmillis.com를 다음 페이지의 HTML을 구문 분석합니다. 네트워킹 지연을 고려하고 연결을 확인해야합니다. 난 그냥 ... 재단을 사용하기로 결정
체이스 로버츠에게

2
정수로 어떻습니까?
rstackhouse

82

Swift 3.0의 경우

Date().timeIntervalSince1970

2
잘 했어. 또한, 여러분이 관심이있을 수 있습니다 stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
매트 존슨 - 파인트

49
UNIX 시간 형식은 밀리 초입니다. 그래서 지능 (날짜 () timeIntervalSince1970 * 1000.)
칩 - 사랑 - 뉴욕

9
@ CHiP-love-NY : 그건 사실이 아닙니다. Unix 시간 은 UTC 1970 년 1 월 1 일 이후 의 입니다.
Martin R

1
그것은 반환 TimeInterval이 secods에,
다니엘

1

다음을 사용하여 얻을 수 있습니다.

Int(Date().timeIntervalSince1970)

주어진 날짜를 얻으려면 현재 날짜입니다.

Int(myDate.timeIntervalSince1970)

UNIX 시간 epoch에서 Swift Date 시간으로 다시 변환하려면 다음을 사용할 수 있습니다.

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift timeIntervalSince1970는 "sub-millisecond"정밀도로 기록 된 초를 반환합니다. 일반적으로 마이크로 초를 의미하는 것으로 관찰되었지만 때로는 하나의 스케일 (소수점 오른쪽으로 한 자리) 이하 또는 그 이상을 의미합니다. 5 스케일 (소수점 5 자리)을 반환 할 때 Swift가 후행 0을 삭제하는지 또는 6 스케일의 정밀도를 생성 할 수 없는지 알 수 없습니다. 그러나 7의 스케일을 리턴하면 마이크로 초 정밀도를 초과하므로 추가 숫자가 잘릴 수 있습니다. 따라서 일관되고 정확한 실제 값의 경우 :

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

그러나 불행히도 2038 년에는 32 비트 숫자가 Unix 타임 스탬프에 사용할 수 없으며 64 비트 여야합니다.

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

확장:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp

0

Foundation을 가져 오지 않으려면 (예 : Linux 사용 등) CoreFoundation에서 다음을 사용할 수 있습니다.

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

Date와 친구들이 언제 크로스 플랫폼이 될지 아십니까?
Zoltán Matók

@ ZoltánMatók 재단을 더 많이 재 구현할 계획이 있다고 들었습니다. 자세한 내용은 forums.swift.org를 참조하세요.
rshev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.