SwiftでUnixエポック時間を取得する


102

Swiftでエポックから秒をどのように取得しますか?


2
Objective-Cと同じ-NSDateを使用します。
gnasher729 14

2
Objective-Cが嫌いなため、Apple製品の開発は避けました。したがって、私はそれを学んでいません。そして、私はSwift構文が少なくともわずかに異なることを知っています。構文を見せてください。簡単なSOの評判を自分で得る。
Chris Redford


3
いいえ、Swiftメソッドのエントリに直接リンクしています- timeIntervalSince1970
zaph 2014

3
実際、私は特定の方法にリンクしました:)
Martin R

回答:


162

NSDateのtimeIntervalSince1970関数を使用するだけです。

let timeInterval = NSDate().timeIntervalSince1970

7
これにはFoundationをインポートする必要があることに注意してください。
AlBlue、2014

3
財団を使わずにいかがですか?
marius

3
あなたは基礎を使用したくないなら、あなたはAFNetworking / AlamoFire(使用することができgithub.com/Alamofire/Alamofireをロードするために)currentmillis.comをし、ページのHTMLを解析します。ネットワークの遅延を考慮し、接続を確認する必要があることに注意してください。Foundationを使用することにしました...
Chase Roberts

2
intとしてはどうですか?
rstackhouse 2017

82

Swift 3.0の場合

Date().timeIntervalSince1970


49
UNIXの時刻形式はミリ秒です。So Int(Date()。timeIntervalSince1970 * 1000)
CHiP-love-NY 2017

9
@ CHiP-love-NY:それは真実ではありません。Unix時間は、1970年1月1日(UTC)からの数です。
マーティンR

1
それは返す時間間隔 secodsであり、
ダニエル・

1

あなたは以下を使ってそれを得ることができます

Int(Date().timeIntervalSince1970)

これは、特定の日付で取得したい場合、現在の日付用です

Int(myDate.timeIntervalSince1970)

UNIXタイムエポックからSwift Dateタイムに変換する場合は、以下を使用できます。

let date = Date(timeIntervalSince1970: unixtEpochTime)

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

Swift timeIntervalSince1970は、「サブミリ秒」の精度で文書化されている秒数を返します。これは、通常マイクロ秒を意味しますが、1スケール(小数点の右側の1桁)が多少変動することもあります。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

デートや友達がいつクロスプラットフォームになるか知っていますか?
ゾルタンMatók

@ZoltánMatókオープンな環境でFoundationをさらに再実装する計画があると聞いています。詳細については、forums.swift.orgをご覧ください。
rshev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.