1

tempDateString という文字列パラメーターを介して [日 月 年] 形式で日付を受け取ります (例: 01 05 2005):

 NSLog(@"tempdatestring %@", tempDateString);
 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"dd MM YYYY"];
 NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
 NSLog(@"daydate %@", dayDate);

私の問題は、2 つのログが一致しないことです。出力は次のとおりです。

tempdatestring 04 10 2012
daydate 2011-12-24 22:00:00 +0000

適切な日付を取得するには、日付フォーマッタの日付形式で何を変更する必要がありますか?

4

4 に答える 4

8

2 問題

  • フォーマットが間違っています。@"dd MM yyyy" 大文字と小文字が区別されます
  • タイムゾーンを使用して正しい値を取得する [GMT 値]

    NSString *tempDateString=@"04 10 2012" ;
    NSLog(@"tempdatestring %@", tempDateString);
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateFormatter setDateFormat:@"dd MM yyyy"];
    NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
    NSLog(@"daydate %@", dayDate);
    
于 2012-10-04T09:06:10.703 に答える
1
NSDateFormatter *form = [[NSDateFormatter alloc] init];
[form setDateFormat:@"dd MM yyyy"];
form.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:-7200.0];
NSDate *dayDate = [form dateFromString:@"05 10 2012"];
NSLog(@"daydate %@", dayDate);
NSString *strDate = [form stringFromDate:dayDate];
NSLog(@"strDate %@",strDate);

日付形式を に変更します@"dd MM yyyy"。この後、dateFromString はまだ間違った日付を解析する可能性があります (私の場合は昨日の 21-00 でした)。これを避けるために、DateFormatter で TimeZone を設定しました。

form.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:-7200.0];

-7200.0 は私のタイムゾーンです。これを自分のタイムゾーンに変更する必要があります (「0」はグリニッジに設定されます)。このログの後は次のようになります。

daydate 2012-10-05 02:00:00 +0000
strDate 05 10 2012
于 2012-10-04T09:04:26.303 に答える
1

これを行う:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd MM yyyy"];
NSDate *dayDate = [dateFormatter dateFromString:tempDateString];
NSLog(@"daydate %@", dayDate);
NSString *strDate = [dateFormatter stringFromDate:dayDate];
NSLog(@"strDate :%@",strDate);
于 2012-10-04T08:48:42.657 に答える
1

%@書式指定子を使用する-descriptionと、提供されたオブジェクトで呼び出されたメソッドの戻り値が使用されます。

NSDate-descriptionメソッドは、その特定の方法でその値を出力します。

ただし、実際の問題は、日付形式の文字列が正しくないことです-そうあるべきですdd MM yyyy

これをサンプルXcodeプロジェクトに貼り付けました:

NSString *s = @"04 11 2012";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd MM yyyy"];
NSDate *d = [df dateFromString:s];
NSDateComponents *c = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:d];
NSLog(@"%@", c);

次の出力が得られました。

2012-10-04 01:53:24.320 dftest[59564:303] <NSDateComponents: 0x100113e70>
    Calendar Year: 2012
    Month: 11
    Leap month: no
    Day: 4
于 2012-10-04T08:38:38.360 に答える