- [NSDateFormatter dateFromString:]返回nil
问题描述:
NSString *lower = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:0]];
NSString *higher = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:[newDates count]-1]];
NSLog(@"%@",lower);
NSLog(@"%@",higher);
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
NSDate *dtLower = [df dateFromString:lower];
NSDate *dtHigher = [df dateFromString:higher];
[df release];
NSDateFormatter *df1 = [[NSDateFormatter alloc] init];
[df1 setDateFormat:@"yyyy-MM-dd"];
NSString * lowerDate = [df1 stringFromDate:dtLower];
NSString * higherDate = [df1 stringFromDate:dtHigher];
UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 31, self.view.frame.size.width, 30)];
[dateLabel setTextColor:[UIColor grayColor]];
dateLabel.text = [NSString stringWithFormat:@"%@ - %@",lowerDate,higherDate];
[self.view addSubview:dateLabel];
输出的lower
和higher
在控制台:- [NSDateFormatter dateFromString:]返回nil
2011-05-23 14:55:52.767 Vocab[4225:207] 2011-05-23 03:58:22
2011-05-23 14:55:53.781 Vocab[4225:207] 2011-05-23 07:14:56
在这里,上面的代码并没有为我工作。为higher
和lower
值不为空,但是当我尝试使用NSDateFormatter转换成NSDate的则返回零。
所以dtLower
和dtHigher
回零
出了什么问题?
答
尝试设置[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
答
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
你的第一个日期格式是错误的。
答
如果您正在使用用户可见日期,应避免设置日期格式字符串,因为很难预测格式字符串在所有可能的用户配置中的表现方式。相反,你应该尝试限制自己通过-[NSDateFormatter setDateStyle:]
和-[NSDateFormatter setTimeStyle:])
设定日期和时间样式(。
如果你有固定格式的日期工作,你应该首先设置的日期格式的区域设置适当的东西为您的固定格式。在大多数情况下,最好的区域选择是en_US_POSIX
,这是专门设计用于生产美国英语的结果,无论用户和系统首选项的语言环境。en_US_POSIX
也是不变的时间和机器之间(en_US_POSIX
适用于iOS相同因为它在OSX,并且因为它确实在其他平台上)。
一旦你设置en_US_POSIX
的日期格式的区域设置,您可以设置日期格式字符串和日期格式将始终如一地为所有用户。
上述信息,更可以发现苹果的Technical Q&A QA1480
下面是一个代码片段,它实现从上面的技术说明推荐:
static NSDateFormatter* dateFormatter = nil;
if (!dateFormatter)
{
dateFormatter = [NSDateFormatter new];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc]
initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss +0000";
}
@parth:欢迎你:) – KingofBliss 2011-05-23 10:36:35