1

strptime_lは常に null を返します。私はObjective-Cでこれをやっています。

#import <time.h>
#import <xlocale.h>

/* Later on... */      

    const char *str = [dateStr UTF8String];
    const char *fmt = [@"EE LLLL d HH:mm:ss Z yyyy" UTF8String];
    struct tm timeinfo;
    memset(&timeinfo, 0, sizeof(timeinfo));
    char *ret = strptime_l(str, fmt, &timeinfo, NULL);

    NSDate *date = nil;

    if (ret) {
        time_t time = mktime(&timeinfo);

        date = [NSDate dateWithTimeIntervalSince1970:time];
    }

retは常に null です。dateStrの値の例は次のとおりSat Sep 15 05:52:10 +0000 2012です。常にその形式です。

何か案は?

4

1 に答える 1

3

strptime形式の代わりにNSDateFormatter形式を使用しているようです。特定の日付と時刻の形式の詳細については、こちらをご覧ください。

次のコードが機能するはずです。

NSString *dateStr = @"Sat Sep 15 05:52:10 +0000 2012";

const char *str = [dateStr UTF8String];
const char *fmt = [@"%a %b %d %H:%M:%S %z %Y" UTF8String];
struct tm timeinfo;
memset(&timeinfo, 0, sizeof(timeinfo));
char *ret = strptime_l(str, fmt, &timeinfo, NULL);

NSDate *date = nil;

if (ret) {
    time_t time = mktime(&timeinfo);

    date = [NSDate dateWithTimeIntervalSince1970:time];
}

ちなみに、次のことを行うだけで同じことを達成できたはずです。

NSString *dateStr = @"Sat Sep 15 05:52:10 +0000 2012";

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EE LLLL d HH:mm:ss Z yyyy"];
NSDate *date = [dateFormat dateFromString:dateStr];
于 2012-09-16T10:08:19.113 に答える