1

とをNSDates介して2 つを連結したい。最初のものは、で構成される完全な形式です。しかし、2番目のものには時間と分の情報しかありません。したがって、2番目の日付には、最初の日付から秒を除くすべての情報が必要です(自動的に追加されますか?)。dtFormatter が文字列を日付にフォーマットするまで、すべてがうまく機能すると思います。私はすでにstackoverflowで検索しましたが、私の問題を解決できる解決策はありません:NSDateComponents[NSString stringWithFormat][dtFormatter dateFromString]yyyy-MM-dd HH:mm:ss

私のコード:

//pDate has a complete date format
NSDateComponents *dateComponentsComplete = [[NSCalendar currentCalendar]
components:NSYearCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit fromDate:self.pDate];
//sunRise has the incomplete format
NSDateComponents *dateComponentsIncompleteSunRise = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:self.sunRise];

NSInteger day = [dateComponentsComplete day];
NSInteger month = [dateComponentsComplete month];
NSInteger year = [dateComponentsComplete year];

NSInteger hour = [dateComponentsIncompleteSunRise hour];
NSInteger minute = [dateComponentsIncompleteSunRise minute];

//concatenate  
NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d", year, month, day, hour, minute];

NSLog(@"strSunRise %@ ",  strSunRise);

NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
[dtFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[dtFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate* dateOutput = [dtFormatter dateFromString:strSunRise];
NSLog(@"%@", [dateOutput class]);
NSLog(@"dateOutput %@ ", [dtFormatter stringFromDate:dateOutput]);

出力:

strSunRise 2013-7-25 5:16 
(null)
dateOutput (null)
4

2 に答える 2

2

入力文字列が次の形式と一致しません:

format: @"yyyy-MM-dd HH:mm:ss"
input:  @"2013-7-25 5:16"
                        ^^^ missing :00

小さなコード mod で修正できます。

NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d:00", year, month, day, hour, minute];
                                                                  ^^^

(または:ssフォーマット文字列から削除することによって)。

于 2013-07-25T12:05:54.243 に答える
0

あなたのコード行:

NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d", year, month, day, hour, minute];

秒を含む日付フォーマッタを使用しているため、秒も含める必要があります。

[dtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
于 2013-07-25T12:05:46.193 に答える