BLOG
ブログ
![](https://wingdoor.co.jp/wp-content/themes/wingdoorco/img/blog/img_fv_pc.png)
![](https://wingdoor.co.jp/wp-content/themes/wingdoorco/img/blog/img_fv_sp.png)
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)
![](https://wingdoor.co.jp/wp-content/uploads/2024/03/IMG_2D5D8E5562BB-1-139x300.jpeg)
iOS端末から日付を取得しフォーマットをかけて表示しています。
通常使う分ではこの方法で問題ないのですが、iOS端末の日付を変更した場合は変更後の日付が返ってきてしまい、正確な現在の日時を取得できません。
![](https://wingdoor.co.jp/wp-content/uploads/2024/03/IMG_3D9A0FFE07DA-1-139x300.jpeg)
NTPサーバからの取得方法
Kronosの導入
- KronosはSwift Package Managerからインストール可能です。
![](https://wingdoor.co.jp/wp-content/uploads/2024/01/6909c5fd1e6060c55c15771e32536450-1024x201.png)
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")
![](https://wingdoor.co.jp/wp-content/uploads/2024/03/IMG_EB04CF594CF0-1-473x1024.jpeg)
まとめ
通常使う分、iOS端末の時間を取得する方法で問題ないのですが、外部から正確な時間を取得する場合にKronos
を使えば容易に取得可能です。Kronos
を使えば、接続するNTPサーバを指定できるので、国ごとにNTPサーバを変更することが可能です。
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!