0

重複の可能性:
[NSDate date] から数時間ずれた日付を取得する

実際の日の日付を使用して実際の日の真夜中の時間を計算したいコードは次のとおりです。

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
 NSDate *today = [NSDate date];
    NSString *todayStr = [NSString stringWithFormat:@"%@ 12:59 PM",[formatter stringFromDate:today]];
NSLog(@"%@",todayStr);
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
NSDate *midNight = [formatter dateFromString:todayStr];
NSLog(@"%@",midNight);

しかし、私が得るログは次のとおりです。

23/01/2013 12:59 PM
2013-01-23 10:59:00 +0000

midNightが実際の午前 0 時ではなく、形式が と異なるのはなぜですかformatter?

4

2 に答える 2

1

日付フォーマッターで計算した午前 0 時では、ローカライズが考慮されます。

つまり、あなたは UTC+2 タイムゾーンに住んでいます。

UTC の「Z」を追加できます。

詳細については、http://www.w3.org/TR/NOTE-datetimeを参照してください。

于 2013-01-23T17:17:17.773 に答える
0

これにより、ローカル タイムゾーンの午前 0 時が計算されます。

NSDate *d = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comps = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:d];
d = [cal dateFromComponents:comps];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
NSString *dateStr = [formatter stringFromDate:d];
NSLog(@"%@", dateStr);

印刷 2013/01/23 12:00 AM

于 2013-01-23T18:30:05.593 に答える