2

我正在尝试将字符串转换为 NSDate。而且不明白我的代码有什么问题。

   dateString = [NSString stringWithFormat:@"Sun 02 feb 14 12:30"];
    NSLog(@"dateString %@",dateString);
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
     [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    [dateFormatter setDateFormat:@"EEE dd MMM yy HH:mm"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];


    NSLog(@"dateFromString %@",dateFromString);

我得到零。我尝试了不同的日期(相同的格式),总是为零。例如。2013 年 11 月 7 日星期四 12:45

有人看到错误吗?

4

2 回答 2

5

您缺少日期的语言环境,将日期格式化程序的语言环境设置为英语,以确保它知道日期是英语:

NSString *dateString = @"Sun 02 feb 14 12:30";
NSLog(@"dateString %@",dateString);

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE dd MMM yy HH:mm"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en"] autorelease]];
NSDate *dateFromString = [dateFormatter dateFromString:dateString];

NSLog(@"dateFromString %@",dateFromString);

这里也不需要alloc日期NSDate *dateFromString = [[NSDate alloc] init];。如果您不使用 ARC,那么您只是泄漏了一个NSDate对象。如果您使用 ARC,请autoreleaseNSLocale.

于 2013-11-05T11:01:49.653 回答
0
 dateString = [NSString stringWithFormat:@"Sun 02 feb 14 12:30"];
    NSLog(@"dateString %@",dateString);
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    [dateFormatter setDateFormat:@"EEE dd MMM yy HH:mm"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
    NSDate *dateFromString = [NSDate alloc];
    dateFromString = [dateFormatter dateFromString:dateString];

此代码作为输出给出: dateFromString 2014-02-02 12:30:00 +0000 这是正确的。

于 2013-11-05T11:04:13.027 回答