2013-09-28 61 views
0

我有NSString的对象转换成的NSDate的问题。这是我想做的事: 我从互联网下载的RSS信息。我有整个NSXMLParser解析的消息。之后,我有一些部分或保存到特定的NSStrings。我想转换元件(其包括RSS消息的发布日期),以的NSDate,这样我可以像一个日期对象上就可以执行某些操作(例如排序,显示上的时钟等)。这里是我的长相喜欢的方式:NSDateFormatter dateFromString转换

“星期三,2013年9月25日12时56分57秒GMT”

我试图将其转换为NSDate的过程是这样:

*//theString is NSString containing my date as a text 
NSDate *dateNS = [[NSDate alloc] init]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss ZZZ"]; 
dateNS = [dateFormatter dateFromString:theString];* 

然而,在做了上面的代码之后,dateNS总是显示为(null)。

我的问题很简单:什么是正确的方式来转换NSString与日期格式化到NSDate对象?

顺便说一句,我已经看到了网站 http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns 看来,有很多方法可以格式化特定的日期,但我找不到什么,我做错了。

+0

您需要24小时格式的“HH”小时。 – rmaddy

+0

OK,它现在的作品。我没有设置时区和语言环境(顺便说一句,我仍然不知道为什么我必须这样做)。 – tom55

+0

但我又遇到了另一个问题:将我的日期从字符串转换为NSDate后,它会在3小时内移动,例如, 01.01.2013 11:30 - > 01.01.2013 14:30。为什么?是否因为LocaleIdentifier错误(我在波兰,我为en_GB设置LocaleIdentifier - 我将它更改为pl_PL时出现问题,TimeZone更改为欧洲/华沙)。 – tom55

回答

0

你的问题是你的日期格式有不相同的堡垒为您的日期字符串: 你应该设置日期格式相同的格式,与您的日期字符串

我的例子:

//将字符串转换为日期

NSString *beginString = @"Sat, 30 Dec 2013 14:45:00 EEST"; 
    //beginString = [beginString stringByReplacingOccurrencesOfString:@"EEST" withString:@""]; 
    //beginString = [beginString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]]; 
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Helsinki"]]; 
    [dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"]; 
    dateFromString = [dateFormat dateFromString:beginString]; 

    //NSLog(@"Begin string: %@", beginString); 

    //NSLog(@"not formated: %@", dateFromString); 

    // Convert Date to string 

    [dateFormat setTimeZone:[NSTimeZone localTimeZone]]; 
    [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]]; 
    [dateFormat setDateFormat:@"dd MMMM yyyy"]; 
    myStrDate = [dateFormat stringFromDate:dateFromString]; 
    [currentTitle setPubDate:myStrDate]; 
0

NSDate * dateNS = [[NSDate alloc] init];是没用的,你不需要分配任何日期对象。

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"]; 
NSLog(@"%@", [dateFormatter dateFromString:@"Wed, 25 Sep 2013 12:56:57 GMT"]); 

输出日期正确,你确定theString是不是nil

相关问题