BLOG
ブログ
2024/04/08
技術系
【Swift】NTPサーバからKronosを使って現在日時を取得する方法について
タグ
こんにちは、T.Oと申します。
SwiftでiOSアプリを開発中に、iOS端末からではなくNTPサーバから正確な現在日時を取得する必要があり、その時に使用したライブラリ「Kronos
」のご紹介をいたします。
検証環境
- Apple M2
- macOS 13.2.1
- Xcode 14.2
- Swift Package Manager
iOS端末から日時情報を取得する方法
ライブラリを使わずにiOS端末から取得する方法は以下の通りです。
// iOS端末情報から現在の日時を取得
let date = NSDate()
let format = DateFormatter()
formatter.dateFormat = "HH:mm:ss"
label.text = format.string(from: date as Date)
iOS端末から日付を取得しフォーマットをかけて表示しています。
通常使う分ではこの方法で問題ないのですが、iOS端末の日付を変更した場合は変更後の日付が返ってきてしまい、正確な現在の日時を取得できません。
NTPサーバからの取得方法
Kronosの導入
- KronosはSwift Package Managerからインストール可能です。
Clock.sync()
のクロージャに、取得後の処理を書くことで、NTPサーバから返ってきた結果を表示することができます。
// NTPサーバから現在の時刻取得
Clock.sync { now, offset in
let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd HH:mm"
self.label.text = format.string(from: now as Date)
}
NTPサーバの指定がない場合は、デフォルトで time.apple.com
が使用されます。
以下のようにNTPサーバを指定することも可能です。
// NTPサーバ指定
Clock.sync(from: "ntp.nict.jp")
まとめ
通常使う分、iOS端末の時間を取得する方法で問題ないのですが、外部から正確な時間を取得する場合にKronos
を使えば容易に取得可能です。Kronos
を使えば、接続するNTPサーバを指定できるので、国ごとにNTPサーバを変更することが可能です。
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!