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 件のコメント :
コメントを投稿