2011-05-01 17 views
0

皆さん、こんにちは皆、NSDateFormatterを使用して次のフォーマットを新しいフォーマットに変換する必要があります。私はこれでかなり味付けされていますが、何らかの理由で私はこのフォーマットの正しいフォーマット情報を覚えていません。1タイムゾーンのNSString日付を別のタイムゾーンを持つNSDateオブジェクトに変換する

'金曜日、2011年3月25日10:16:00 -0700'。

「aaa、dd bbb YYYY HH:MM:SS ZHHMM」の形式で試してみましたが、動作しません。

また、新しい日付を作成するときに、それを東部時間帯に変換する必要があります。 「+0000」と書かれていますが、それはどのように正規化されていますか?

すべてのヘルプ感謝、あなたがそのような日付文字列を取得しているとき おかげで、 〜アラシュ

答えて

1

は一般的に、あなたはどこから来ているものロケールを知っている、とあなたはNSDateFormatterを取ると、使用して、そのロケールを設定setLocale:を使用して、setDateStyle:setTimeStyle:を使用して日付と時刻の書式を設定し、次にdateFromString:を使用します。あなたはロケールを知らないので、あなたはuse the UNIX functionsできることを行うことができない場合は、次の

struct tm sometime; 
const char *formatString = "%a, %d %b %Y %T %z"; 
strptime_l("Fri, 25 Mar 2011 10:16:00 -0700", formatString, &sometime, NULL); 
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970: mktime(&sometime)]; 

次は、東部時間にNEWDATEを「変換」したいと思います。 NSDatesにはタイムゾーンに関する情報が含まれていないため、2001年1月1日以降の秒数で表されているため、「変換」と言います。変換の考え方は意味がありません。 NSDateをプリントアウトすると、UTC(+0000)で取得されますが、NSDateは他のタイムゾーンとは関係ありません。

あなたが代わりにやりたいことは、右のタイムゾーンでたDateFormatterを作成し、出力に日付を、それを使用することです:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"]]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]]; 
[dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
NSLog(@"%@",[dateFormatter stringFromDate:newDate]); 
// Outputs 25 Mar 2011 13:16