2016-07-04 11 views
-1

私のような問題がたくさんありますが、何か問題があります。なぜ機能のsetDayが1日少なく設定されていますか?どこで私は間違えましたか?NSDateComponentsの問題 - 間違った日を設定する

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDate *today = [NSDate date]; 
NSLog(@"today date = %@", today); 
NSDateComponents *components = [calendar components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:today]; 
[components setDay:1]; 
NSLog(@"modified date = %@", [calendar dateFromComponents:components]); 

ログイン:

today date = 2016-07-04 10:01:30 +0000 
modified date = 2016-06-30 21:00:00 +0000 

更新日は2016年7月1日

+0

を、私はその実際に2016から07を考えます-01しかし真夜中に –

+0

あなたのタイムゾーンはUTC + 3ですね。 – vadian

答えて

1

多分それする必要があり、24:00 GMT、 2016年7月1日です。 NSLog()はロケールタイムではなく、GMT用に出力します。

ここを参照してください:あなたがこのようなNSDateComponentsでNSCalendarUnitHourを追加する必要がありますUnexpected value from NSDate

+0

ありがとう、私の問題を解決する - [カレンダーsetTimeZone:[NSTimeZone timeZoneWithAbbreviation:@ "UTC"]]; –

1

、その後、あなたは正しい日付

NSDateComponents *components = [calendar components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear |NSCalendarUnitHour) fromDate:today]; 
+0

あなたの答えをありがとう、それは私の問題を解決する –

+0

@АлексейАлыбин私の答えを受け入れると私をupvote –

0

を取得し、このコードを試してみてください。

NSDateFormatter* df = [[NSDateFormatter alloc] init];  
[df setTimeZone:[NSTimeZone defaultTimeZone]]; // your time 00:00:00 
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSLog(@"modified date = %@", [df stringFromDate:[calendar dateFromComponents:components]]); // Date format NSString 
関連する問題