使用 NSDate 将字符串转换为日期,我的日期更改为 6 个月前

Using NSDate to convert a string to a date, my dates are changed to 6 months back

我有一个网络服务可以显示一些日期,在我的 iOS 应用程序中,我正在将 UTC 日期转换为本地日期。我已经验证网络服务正在吐出 UTC 日期并且 iOS 将其识别为 UTC。

将网络服务 JSON 转换为 NSMutableArray 后,设置断点并键入 po [listOfTasks valueForKey:@"LASTEMAILDATE"]

结果

<__NSArrayI 0x157068c80>(

,

7/28/2016 2:01:41 PM,

7/28/2016 2:01:39 PM,

7/28/2016 2:01:42 PM

)

现在,我做一个 for 循环

for (int i = 0; i < listOfTasks.count; i++) {
    FireStormCategories *cat = [listOfTasks objectAtIndex:i];

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"mm/dd/yyyy hh:mm:ss a"];

    NSDate *date = [df dateFromString:cat.LASTEMAILDATE];
    MNLog(@"%@ was changed to %@", cat.LASTEMAILDATE, [df stringFromDate:date]);
}

那个日志吐出来

was changed to (null)

7/28/2016 2:01:41 PM was changed to 01/28/2016 02:01:41 PM (expecting: 7/28/2016 10:01:41 AM )

7/28/2016 2:01:39 PM was changed to 01/28/2016 02:01:39 PM (expecting: 7/28/2016 10:01:39 AM )

7/28/2016 2:01:42 PM was changed to 01/28/2016 02:01:42 PM (expecting: 7/28/2016 10:01:42 AM )

我的第一个对象没有日期,(null) 是预期的,但是,这是我感到困惑的地方。我的其他 3 个日期更改为反映 6 个月前的日期,时间应该回到 5 (EST)。

您使用的月份格式有误。 MM 用于月份,mm 用于分钟

[df setDateFormat:@"mm/dd/yyyy hh:mm:ss a"];

应该是

[df setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];

您得到的 01 是从日期算起的分钟数。