1

こんにちは、サーバーから取得したNSStringをNSDateオブジェクトに変換しようとしています。それがコードです:

NSString *date = @"Sep 12 at 12:03 am";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM d 'at' H:m a"];
self.messageDateAndTime = [dateFormatter dateFromString:date];
NSLog(@"NSDate: %@", self.messageDateAndTime);

日付文字列の形式で日付を取得しています。この日付形式用に独自のフォーマッターを作成しようとした後。しかしとにかく、私はnullを取得しています!

私が間違っているのは何ですか?

4

3 に答える 3

2

上記のコードをデバッグして正常に実行し、NSDate: 1970-09-11 18:33:00 +0000このログを提供します。最初に文字列を確認してください。詳細については、以下のカテゴリを使用できます。

// NSString+Date.h
@interface NSString (Date)
+ (NSDate*)stringDateFromString:(NSString*)string;
+ (NSString*)stringDateFromDate:(NSDate*)date;
@end


// NSString+Date.m
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];

NSDate *date = [dateFormatter dateFromString:stringDate ];
[dateFormatter release];
+ (NSDateFormatter*)stringDateFormatter
{
    static NSDateFormatter* formatter = nil;
    if (formatter == nil)
    {
        formatter = [NSDateFormatter alloc] init];
        [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
    }   
    return formatter;
}

+ (NSDate*)stringDateFromString:(NSString*)string
{
    return [[NSString stringDateFormatter] dateFromString:string];
}

+ (NSString*)stringDateFromDate:(NSDate*)date
{
    return [[NSString stringDateFormatter] stringFromDate:date];
}


// Usage (#import "NSString+Date.h")
NSString* string = [NSString stringDateFromDate:[NSDate date]];
NSDate* date = [NSString stringDateFromString:string];
于 2012-09-10T09:29:57.387 に答える
1

ここで正しいNSDateFormatter フォーマット文字列を見つけてください。

于 2012-09-11T12:06:24.757 に答える
0

私は自分で解決策を見つけました。ロケールを自分で設定するまではnullを返します。これはコードです:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];
[dateFormatter setDateFormat:@"MMM d 'at' H:m a"];
self.messageDateAndTime =[dateFormatter dateFromString:messageDate];
于 2012-09-10T11:02:18.340 に答える