【问题标题】:NSDate formatter conversion not yielding correct dateNSDate 格式化程序转换未产生正确的日期
【发布时间】:2012-01-28 20:11:58
【问题描述】:

我在使用日期格式化程序正确检索日期时遇到问题。我已将日期保存为以下格式:

[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"];

现在我需要在视图控制器中显示保存的日期。为了便于阅读和简单,我从数据库中检索了保存的日期并更改为短格式,例如 1 月 17 日、2 月 18 日等。这是实现代码:

remind.Date = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 3)];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:remind.Date];
[dateFormat setDateFormat:@"MMMM dd"];
NSString *dateVal = [dateFormat stringFromDate:date];
remind.Date = dateVal;

现在日期值将可见,如以下快照所示:

所有这些日期都保存在一个名为 grpArray 的数组中

现在我想检索格式化日期的完整日期,当我选择行并导航到保存该日期的控制器时,在索引路径处选择行时,我实现了以下代码:

-(void)tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        ReminderClass *rem = [self.grpArray objectAtIndex:indexPath.section];

        // Instantiate your detail/editor view controller,
        // and pass in the ReminderClass object to be edited.
        ERAddReminderViewController *rdvc = [[[ERAddReminderViewController alloc]initWithReminder:rem]autorelease];

        NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
        [dateFormat setDateFormat:@"MMMM dd"];
        [dateFormat setLenient:YES];
        NSDate *date = [dateFormat dateFromString:rem.Date];
        [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString *dateVal = [dateFormat stringFromDate:date];
        rem.Date = dateVal;

        [self.navigationController pushViewController:rdvc animated:YES];
        rdvc.navigationItem.rightBarButtonItem.title = @"Edit";
}

现在根据逻辑,我应该得到完整的日期,即指定的格式。它工作正常,但最初保存的正确年份和时间出现问题。请参阅以下快照以进行澄清:

现在我们看到的日期是 1970-01-17 00:00:00

但我保存的实际日期是 2012-01-17 19:40:40

实施中出了什么问题

谁能给我指点一下

提前谢谢大家:)

【问题讨论】:

    标签: iphone nsdate nsdateformatter


    【解决方案1】:

    我看到的是您正在尝试将日期 MMMM dd 转换为 yyyy-MM-dd HH:mm:ss。 这当然是不可能的,因为第一种格式的日期不知道年份和时间。
    这就是为什么它显示 1970 00:00:00 ,01-17 是正确的(当然)

    您总是必须“存储”原始日期 yyyy-MM-dd HH:mm:ss 并使用它而不是格式化的日期。

    【讨论】:

    • 非常感谢您的回答,但我的意思是在表格视图的单元格中显示格式为月日,当用户选择行时,他/她必须能够查看完整日期,以便可以对现有日期进行修改。如果我没有检索到完整的日期,当我回到以前的日期时,它会显示为空,所以请在这些方面帮助我,谢谢 :)
    • 请查看快照,第一个用户可以查看日期的位置,并在选择后导航到存在该日期的数据我放置了一个按钮(右侧导航栏按钮项)编辑进行更改,修改完成后,他点击完成。然后修改的日期被现有的覆盖,它的视图显示在第二个屏幕截图中
    • 你能告诉我你在grpArray数组中添加日期的代码吗?
    • 哦,确定这是我使用的行:[self.grpArray addObject:remind];其中提醒是模型类的对象,包含名称、事件、日期等。请参阅我检索日期并分配给提醒的帖子。日期。
    • 加入我的聊天室,也许我可以澄清一下:chat.stackoverflow.com/rooms/7121/basvk
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多