[英]NSDate won't load/display correctly
我不确定这是怎么回事。 我试图从文件加载NSString *对象,使用日期格式将其转换为NSDate *,然后将小时和分钟组件转换回NSString,以便在Interface Builder中显示时间。 但是,不是将时间保存到文件中,而是将小时数设为19,将分钟数设为0。 (无论放入什么内容,程序都会加载四个不同的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是接收值的IBOutlet)
我不确定在这里哪里出错了,任何帮助将不胜感激。 谢谢!
更新:在这里的一些人的建议下,我已经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日期格式模式 。
接下来,在显示日期时,如果要以格林尼治标准时间显示小时和分钟,而不是用户当前的时区,则需要设置日历的时区:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.