我可能忽略了一些简单的事情,但我无法弄清楚如何在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];
日期字符串总是返回零。我在这里错过了一些简单的东西吗?
答案 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"