0

今日の日付を取得し、時間をユーザー入力値に設定したいと考えています。私はこれを試しました:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
int year = [components year];
int month = [components month];
int day = [components day];
int hour = 10;
NSLog(@"%d %d %d", year, month, day);
NSString *yearStr   = [NSString stringWithFormat:@"%d", year];
NSString *monthStr  = [NSString stringWithFormat:@"%d", month];
NSString *dayStr    = [NSString stringWithFormat:@"%d", day];
NSString *hourStr   = [NSString stringWithFormat:@"%d", hour];
NSString *str1      = [yearStr stringByAppendingString:@"-"];
NSString *str2      = [str1 stringByAppendingString:monthStr];
NSString *str3      = [str2 stringByAppendingString:@"-"];
NSString *str4      = [str3 stringByAppendingString:dayStr];
NSString *str5      = [str4 stringByAppendingString:@" "];
NSString *str6      = [str5 stringByAppendingString:hourStr];
NSString *remind    = [str6 stringByAppendingString:@":00:00"];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *remindOn = [formatter dateFromString:remind];
NSLog(@"First reminder set on: %@ , str: %@", remindOn, remind);

「remind」は期待値 (「hour」変数の目的の値に設定された現在の日付) に設定されていますが、「remindOn」は現在の日付に設定されています。何故ですか?混乱しています。出力は次のとおりです: 最初のリマインダー セット: 2012-06-11 04:30:00 +0000 、str: 2012-6-11 10:00:00

たとえば、「時間」の値が「10」の場合、「remindOn」を 2012-06-11 10:00:00、つまり今日の日付に設定したいのですが、「時間」は「10」に設定されています

4

1 に答える 1

2

NSDateFormatterより正確な日付の使用方法を印刷したい場合、NSLog は日付を GMT 日付として記録します。 stringFromDate:

このような

NSDate *remindOn = [formatter dateFromString:remind];

//Instead of nslog directly, use this stringFromDate:remindOn
NSString *str = [formatter stringFromDate:remindOn];
NSLog(@"date is %@", str); //This will log the correct data

したがって、日付を直接 NSLog しないでください。GMT タイム ゾーンとして返されるためです。

于 2012-06-10T19:37:31.393 に答える