Karakuri.com

Fintechではたらくアプリケーションエンジニアの技術録

Swift4で任意のDateの日時から日の始まりである0時0分のDateの日時を作る

iOSアプリ開発においてデータベースのデータから本日登録されたデータだけを取り出す必要があったのですが、そのためには今日の0時0分のDateを作らなければなりません。例えば.Net Frameworkでは下記のように作成することができます。

var now = DateTime.Now;
var date = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0);

ところがSwiftのDateクラスにはそのようなイニシャライザはありません。また、Dateクラスから時間や分をInt型の値として取り出すこともできないようです。

Calenderクラスと組み合わせて作る

DateクラスとNSDateクラスばかり調べていたので時間かかってしまいました。結論から言うと下記のようにして今日の0時0分を作ることができます。

Calendar(identifier: .gregorian).startOfDay(for: Date()))

Calenderクラスを使うのですね。上記の例ではDateインスタンスを新規で生成しているので今日になりますが、別の日のDateインスタンスを使えば任意の日時の0時0分を作ることができます。.Net FrameworkはDateTime型で色々できるのでNSDateやDateは貧弱で辛いなあと思っていたのですが、Calenderクラスと組み合わせることでDateTimeと同等の機能が用意されているようです。