0

重複の可能性:
NSString から NSDate

Mon Jan 14 14:00:00 CET 2013私はそれをNSDateに変換しようとする形式の日付を持っています:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
NSString *dateString = @"Mon Jan 14 14:00:00 CET 2013"
NSDate *date = [df dateFromString:dateString];

しかし、それは機能せず、入力データdatenil en-GB ロケールであり、デバイスのロケールは nb-NO です

助言がありますか?

4

6 に答える 6

2

あなたはあなたのフォーマットで日を逃しています:

[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];

タイプミスではなかった場合、次のことは適切なロケールを設定して、フォーマッターがCETタイムゾーンを認識するようにすることです。たとえば、en-GBはそれを修正します。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
// that will fix the problem with not recognized CET timezone
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-GB"]];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
NSString *dateString = @"Mon Jan 14 14:00:00 CET 2013"
NSDate *date = [df dateFromString:dateString];
于 2013-01-15T11:04:34.157 に答える
1

タイムゾーンが間違っていると思います。このコードを使用するだけで、完全に機能します:

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
    NSString *dateString = @"Mon Jan 14 14:00:00 EDT 2013";
    NSDate *date = [df dateFromString:dateString];
    NSLog(@"date :: %@",date);

出力を次のように記録します。

date :: 2013-01-14 18:00:00 +0000

編集 :

私はあなたのために何かを見つけました:NSDateFormatterはいくつかのタイムゾーンを解析しません

これはen_GB Localeを使用することで解決できます。次のように説明されています。

于 2013-01-15T11:12:08.057 に答える
1

この機能を使ってみてください

 - (NSDate*) dateFromString:(NSString*)aStr
{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
    //[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss a"];
    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSLog(@"%@", aStr);
    NSDate   *aDate = [dateFormatter dateFromString:aStr];
    [dateFormatter release];
    return aDate;
}

これがお役に立てば幸いです。

于 2013-01-15T11:14:26.617 に答える
0

単純に「CET」は、によって認識されるタイム ゾーンではありませんNSDateFormatter

また、日付/時刻が指定されすぎているため、日または週 (月) を含めないことをお勧めします。

認識されたタイムゾーンで動作するコードを示す例を次に示します。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz yyyy"];
NSString *dateString = @"Mon Jan 14 14:00:00 EST 2013";
NSDate *date = [df dateFromString:dateString];
NSLog(@"date: %@", date);

NSLog 出力

日付: 2013-01-14 19:00:00 +0000

NSLog(@"abbreviationDictionary: %@", [NSTimeZone abbreviationDictionary]);

示します

CET = "ヨーロッパ/パリ";

これは の Apple バグのようNSDateFormatterです。

バグの報告: Apple Bug Reporter

于 2013-01-15T11:09:37.780 に答える
0

CET は認識されません

これを試して :-

NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"EEE MMM dd HH:mm:ss yyyy"];
    NSString *dateString = @"Mon Jan 14 14:00:00 2013";
    NSDate *date = [df dateFromString:dateString];
    NSLog(@"%@",date);

それがあなたを助けることを願っています

于 2013-01-15T11:12:54.577 に答える
-1

以下を使用できます。

[dateFormatter setDateStyle:NSDateFormatterShortStyle];

それでも日付形式をカスタマイズしたい場合は、これを試してください:

yyyy-MM-dd HH:mm:ss ZZZ

独自の書式設定された文字列構文を発明して、それが機能することを期待できないためです。ドキュメントが指摘しているように、実際にはドキュメント化された形式を使用する必要があります。OS X v10.8 および iOS 6.0 のフォーマッタはバージョン tr35-25 を使用します。

-> https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

興味がある場合: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

于 2013-01-15T11:04:20.457 に答える