2011-05-23 117 views
2
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]; 

输出的lowerhigher在控制台:- [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 

在这里,上面的代码并没有为我工作。为higherlower值不为空,但是当我尝试使用NSDateFormatter转换成NSDate的则返回零。

所以dtLowerdtHigher回零

出了什么问题?

回答

8

尝试设置[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

+0

@parth:欢迎你:) – KingofBliss 2011-05-23 10:36:35

3
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 

你的第一个日期格式是错误的。

3

如果您正在使用用户可见日期,应避免设置日期格式字符串,因为很难预测格式字符串在所有可能的用户配置中的表现方式。相反,你应该尝试限制自己通过-[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"; 
}