目的
日時をLong(Int64)にしたかっただけなのに、
他言語なら調べると簡単に見つかるのにSwiftだとなかなか見つからなかった
例えば、Ruby, Java, JavaScriptなら...
Ruby
Time.new.to_i * 1000
# => 1474443262000(ミリ秒に合わせるために1000をかけました)
Java###
new java.util.Date().getTime()
// => 1474443315450
JavaScript(Node.js)
Date.parse(new Date())
// 1474443474000
といった感じで簡単にDate
からLong
(Int
)に変換できる
SwiftでのNSDate⇔Int64の相互変換
以下のコードが動くようなExtensionです
date.toInt64() // NSDateからInt64へ
int64.toNSDate() // Int64からNSDate
extension NSDate{
// NSDate -> Int64
func toInt64() -> Int64{
return Int64(timeIntervalSince1970 * 1000)
}
}
extension Int64{
// Int64 -> NSDate
func toNSDate() -> NSDate{
return NSDate(timeIntervalSince1970: Double(self / 1000) + Double(self % 1000)/1000)
}
}
動作確認
let date = NSDate()
let int64 = date.toInt64()
print("date : ", date)
print("toInt64 : ", int64)
print("toNSDate: ", int64.toNSDate())
出力
Int64
に変換して逆変換でNSDate
にちゃんと戻っていることが確認できました
date : 2016-09-21 8午前8:07:47 +0000
toInt64 : 1474445267102
toNSDate: 2016-09-21 8午前8:07:47 +0000
問題点 解決済み(2016/09/27)
ごめんなさい、問題点があります
Double()
でInt64
の値をDouble
にすると少し値の精度が落ちてしまいます
そのため、Int64#toNSDate()
はおそらくミリ秒の部分で多少の誤差が発生してしまうと思われます。
上記の問題点は@nisinさんのお力によって無事に解決しました!@nisinさんありがとうございます!
詳しい変更はこちらの変更履歴をご参照ください
http://qiita.com/nwtgck/items/2689cc6e7cb339757d1c/revisions/3