文字列からNSDateを作成する, NSDateを1日進める (Swiftの場合はDate)

NSDateを文字列から作成する方法と、すでにあるNSDateを1日進めたものを取得する方法。 応用すれば、1日前や1年後など取得できる。 上記みたいな日付の変更は結構やる機会が多かったりする。 SwiftだとNSDateではなく、Dateだったりするので、それぞれの使い方をまとめます。 ### Objective-C ```objc // 任意のNSDateを進める NSDate *currentDate = [NSDate date]; NSDateComponents *oneDayDateComponents = [[NSDateComponents alloc] init]; [oneDayDateComponents setDay:1]; NSDate *nextDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneDayDateComponents toDate:currentDate options:0]; // 文字列からNSDateを作成する NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy/MM/dd Z"]; NSString *dateString = @"2017/07/25 +0900"; NSDate *dateFromString = [formatter dateFromString:dateString]; ``` ### Swift ``` // 1日後の日付を取得する let currentDate = Date() // 1日後のDateComponentsを作成する (他にも指定できて、1年後とかもできる詳しくはヘッダーを参照) let oneDayDateComponents = DateComponents(day: 1) let nextDate = Calendar.current.date(byAdding: oneDayDateComponents, to: currentDate) // 文字列からDateオブジェクトを作成する let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy/MM/dd Z" let dateString = "2017/07/25 +0900" dateFormatter.string(from: Date()) let dateFromString = dateFormatter.date(from: dateString) print(dateFromString?.timeIntervalSince1970) ``` 日付を扱う場合は、端末のLocale設定も影響するので注意が必要。 よくあるのは、テスト中は西暦でしか確認していなかったからOKだったけど、和暦にするとうまくいかない場合とかよくある。 そういう場合は、端末の設定に依存しないようにすることが必要。

0 件のコメント :

コメントを投稿