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
始终为空。 dateStr
值的一个示例是:Sat Sep 15 05:52:10 +0000 2012
并且始终采用该格式。
有什么想法吗?
答案 0 :(得分:3)
您似乎使用NSDateFormatter格式而不是strptime格式。请查看here了解其特定日期和时间格式的详细信息。
以下代码应该有效:
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];