objective-c - NSDate 无法正确加载/显示

标签 objective-c cocoa nsdate

我不确定这是怎么回事。我正在尝试从文件加载 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 和 分钟Field1 是接收值的 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 Date Format Patterns了解详情。

接下来,在显示日期时,如果您想显示 GMT 的小时和分钟,而不是用户当前的时区,则需要设置日历的时区:

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

关于objective-c - NSDate 无法正确加载/显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996803/

相关文章:

iphone - 在 cocoa/iPhone 中将纪元时间转换为 NSDate

iphone - 使用 UIScrollView 从上到下滚动

iOS:访问4.0以下的OlderBluetoothDevice

ios - 使用 - observeValueForKeyPath :ofObject:change:context: in Swift 3

objective-c - 如何在iOS中获取本地格式化的日期模式字符串?

swift - Playground simple Date() 正在打印值,考虑到我的时区

iphone - ALAssetsLibrary 更改通知未在 ios 5 中触发?

objective-c - 删除(更新)cor​​eData 对象

objective-c - 连接可移动存储时自动启动 Cocoa 应用程序

objective-c - CALayer 中多页 TIFF NSImage 的自动缩放