NSDate不会正确加载/显示
问题描述:
我不确定这是怎么回事。我试图从文件中加载NSString *对象,将它转换为带日期格式化程序的NSDate *,然后将小时和分钟组件转换回NSString,以便在Interface Builder中显示时间。但是,而不是保存到文件中的时间,而是最终以每小时19分钟和每分钟0分钟为结束。 (不管放入什么,程序加载四个不同的NSDates)NSDate不会正确加载/显示
下面是从文件中加载日期的代码(我用断点检查,并且数组确实有正确的数据,所以这不是问题)
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
date1 = [[df dateFromString:[loadArray objectAtIndex:3]] retain];
下面是显示日期的代码。
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [[gregorian components:NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:myDrug.date1] retain];
hourField1.text = [NSString stringWithFormat:@"%d", comp.hour];
minuteField1.text = [NSString stringWithFormat:@"%d", comp.minute];
(hourField1和minuteField1是接收的值,顺便把IBOutlets)
我不知道,我已经走了错在这里,任何帮助,将不胜感激。谢谢!
更新: 在这里的一些人的建议,我NSLogged的问题,我发现它的日期格式化程序不工作。例如,日期格式为2011-02-14 06:00:00 GMT,日期格式化程序为yyyy-MM-dd hh:mm:ss a,所以我不确定它为什么不起作用。
答
如果loadArray日期字符串形式2011-02-14 06:00:00 GMT
的,则该格式应被设定如下:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"]; <--
date1 = [[df dateFromString:[loadArray objectAtIndex:3]] retain];
// the retain above is suspicious btw (but that's another question)
[df release]; //don't forget this
我也改变了hh
到HH
假定小时实际上是24小时,而不是12小时制。详情请参阅Unicode Date Format Patterns。
接下来,显示日期的时候,如果你想显示在格林尼治标准时间的小时和分钟,而不是任何用户的当前时区,你需要设置日历的时区:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"GMT"]; <--
[gregorian setTimeZone:tz]; <--
NSDateComponents *comp = [gregorian components:NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:myDrug.date1];
//do not do a retain on comp above
hourField1.text = [NSString stringWithFormat:@"%d", comp.hour];
minuteField1.text = [NSString stringWithFormat:@"%d", comp.minute];
[gregorian release]; //don't forget this
如何你填写`loadArray`? – vikingosegundo 2011-02-14 20:38:23
直接从一个文件,它是[NSMutableArray arrayWithContentsOfFile:[self saveFilePath]] – Nicholas1024 2011-02-14 20:44:00