如何在Objective-C中格式化未知日期格式

时间:2010-10-10 02:21:02

标签: objective-c

我可能忽略了一些简单的事情,但我无法弄清楚如何在Objective-C中转换特定的日期格式。我收到这种格式的日期:

Sun,2010年10月10日01:44:00 +0000

我需要将它转换为没有时间的长格式,如下所示:

2010年10月10日

我尝试过使用NSDateFormatter,但是当我尝试从字符串中获取日期时,它总是会返回nil。我试过这种方式:

NSString *dateFromData = [articleData objectAtIndex:5];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate *date = [dateFormatter dateFromString:dateFromData];  

NSString *formattedDateString = [dateFormatter stringFromDate:date];

日期字符串总是返回零。我在这里错过了一些简单的东西吗?

2 个答案:

答案 0 :(得分:1)

这是我开始工作的代码,无法使其他格式字符串起作用

NSString *dateFromData = @"Sun, 10 Oct 2010 01:44:00 +0000";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss zzzz"];

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];

NSDate * date = [dateFormatter dateFromString:dateFromData];

[dateFormatter setDateStyle:NSDateFormatterLongStyle];

NSString *formattedDateString = [dateFormatter stringFromDate:date];

答案 1 :(得分:0)

问题是你需要使用两个日期格式化程序。一个用于解析原始格式,另一个用于生成所需的输出。您也不能使用LongStyle日期格式,因为它与您的输入样式不匹配。

NSDateFormatter *df = [[NSDateFormatter alloc] initWithDateFormat:@"%a, %d %b %Y %H:%M:%S %z"
                                             allowNaturalLanguage:false];
NSDate *d = [df dateFromString:@"Sun, 10 Oct 2010 01:44:00 +0000"];
NSDateFormatter *df2 = [[NSDateFormatter alloc] initWithDateFormat:@"%B %d, %Y"
                                              allowNaturalLanguage:false];
[df2 stringFromDate:d]

(注意,我在MacRuby中编写了这段代码并将其移植回Objective-C,因此可能存在语法错误。)

irb(main):001:0> df = NSDateFormatter.alloc.initWithDateFormat("%a, %d %b %Y %H:%M:%S %z", allowNaturalLanguage:false)
=> #<NSDateFormatter:0x20021b960>
irb(main):002:0> d = df.dateFromString("Sun, 10 Oct 2010 01:44:00 +0000")
=> #<NSCalendarDate:0x2002435e0>
irb(main):004:0> df2 = NSDateFormatter.alloc.initWithDateFormat("%B %d, %Y", allowNaturalLanguage:false)
=> #<NSDateFormatter:0x20026db60>
irb(main):005:0> df2.stringFromDate(d)
=> "October 09, 2010"