问题描述
||
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];
Console中“ 1”和“ 2”的输出为:
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
的值不为null,但是当我尝试使用NSDateFormatter将其转换为NSDate时,它将返回nil。
所以dtLower
和dtHigher
返回nil
有什么事吗
解决方法
尝试设置
[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
的时间和机器之间也不变(in12ѭ在iOS上的工作方式与在OSX上以及在其他平台上的工作方式相同)。
将ѭ12设置为日期格式器的区域设置后,即可设置日期格式字符串,日期格式器将对所有用户保持一致。
以上信息以及更多信息可以在Apple的技术问答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\";
}