NSDateを文字列から作成する方法と、すでにあるNSDateを1日進めたものを取得する方法。
応用すれば、1日前や1年後など取得できる。
上記みたいな日付の変更は結構やる機会が多かったりする。
SwiftだとNSDateではなく、Dateだったりするので、それぞれの使い方をまとめます。
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 任意の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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 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 件のコメント :
コメントを投稿