0

この質問はたくさん聞かれましたが、私の問題の解決策を見つけることができません。

欲しいもの:NSStringとして指定された日付を完全に異なる形式のNSDateに変換します。に変換Tue, 31 Jul 2012 10:15:00 GMTしたい2012-07-31 10:15:00 +0000

私のコード

NSString *startDateString = @"Tue, 31 Jul 2012 10:15:00 GMT"; //in real from a server

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss"];

NSDate *startDate = [formatter dateFromString:startDateString];
[formatter setDateFormat:@"yyy-MM-dd HH:mm:ss'Z'"];

NSString *endDateString = [formatter stringFromDate:startDate];
NSDate *endDate = [formatter dateFromString:endDateString];

問題endDateですnil

編集
奇妙な振る舞いを見つけました。
最初のdateFormatを@"EEE, dd MMM yyy HH:mm:ss 'GMT'"(GMTを追加)に変更すると、endDateの出力は正しくなりますが、シミュレーターでのみです。デバイス上ではまだゼロです。
「GMT」のないdateFormatを使用すると、シミュレーターとデバイスの値はnilになります。

4

2 に答える 2

0

これは私にとってうまく機能しています、あなたはそれを使うかもしれません:

NSString *startDateString = @"Tue, 31 Jul 2012 10:15:00 GMT"; //in real from a server

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ssZZZ"]; // SPOT the difference in this line

NSDate *startDate = [formatter dateFromString:startDateString];
[formatter setDateFormat:@"yyy-MM-dd HH:mm:ssZZZ"]; // and SPOT the difference in this line

NSString *endDateString = [formatter stringFromDate:startDate];
NSDate *endDate = [formatter dateFromString:endDateString];

NSLog(@"%@", endDate);

endDate

2012-07-31 10:15:00 +0000

更新#1

実際のデバイスでのみテストされています!

于 2012-08-01T14:41:51.093 に答える
0

変換する前に以下を追加してください

[formatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]];
于 2017-07-26T21:14:02.527 に答える