繁体   English   中英

NSDate无法正确加载/显示

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM