从 NSDate() 保存一个日期,在 CoreData 的末尾没有 +0000

Posted

技术标签:

【中文标题】从 NSDate() 保存一个日期,在 CoreData 的末尾没有 +0000【英文标题】:Save a date from NSDate() without +0000 at the end in CoreData 【发布时间】:2015-01-08 18:46:38 【问题描述】:

我搜索了帖子,但没有找到我可以使用的东西...

我尝试做的是:我想在 CoreData 中保存一个日期(作为 NSDate),但没有像 +0000 这样的时区标识符。这样做的原因是,我稍后将日期用作 TableView 中的排序路径/标题,而最后的 +0000 看起来不太好。 我无法从 CoreData 转换日期,因为我将“titleForHeader”函数与 NSFetchedResultsController 一起使用,所以我没有机会事先转换它...... 或者甚至可以将 NSDate 保存为像 "dd-MM-yyyy / HH:mm" 这样的格式,但仍然是 NSDate() ? 我想在 Swift 中完成这一切!

感谢您的帮助...

【问题讨论】:

NSDate 开始时不包含时区信息。您到底想做什么,将NSDate 格式化为字符串? 就像其他人所说的那样。 NSDate 没有任何时区信息。事实上,它没有任何天、月或年的概念。或者类似的东西。它纯粹是一个时间点。当您将其打印出来时,您的计算机将使用您当前的日历将其呈现为一个字符串,然后显示该字符串。 【参考方案1】:

NSDate 不包含任何时区信息,您需要将 NSDate 保存在 Core Data 中,然后使用 NSDateFormatter 对其进行格式化以显示。

【讨论】:

【参考方案2】:

没有它就不可能保存 NSDate。只有当你要保存为 NSString 并且在这种情况下你可以使用这样的东西:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];

然后将字符串保存为:

[dateFormatter stringFromDate:YOUR_NSDATE_VAR];

干杯。

【讨论】:

是的,我知道如何格式化它,但我只是在寻找一种解决方案来按照我上面描述的方式完成它,看来我必须重构我的整个代码才能完成它......谢谢大家... “没有它就不可能保存 NSDate...” 当然可以,因为它不是 NSDate 的一部分。正如您所描述的,只有在格式化日期时才会出现这种情况。 NSDate 从不包含它。【参考方案3】:

这对我有用:

 NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:@"MaxDate"];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
    NSString *stringFromDate = [formatter stringFromDate:date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat =@"yyyy-MM-dd'T'HH:mm:ss";
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:stringFromDate];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSString *newDateString = [dateFormatter stringFromDate:dateFromString];
    NSLog(@"%@", newDateString);

【讨论】:

@EricAya。忽略您的评论。

以上是关于从 NSDate() 保存一个日期,在 CoreData 的末尾没有 +0000的主要内容,如果未能解决你的问题,请参考以下文章

谓词,从 NSDate 中按年份过滤,产生一个 nil 日期和一个讽刺的 Xcode 错误

NSDate 在 CoreData 中被保存为时间戳

搜索 CoreData 以匹配 NSDate - Swift

ios中从字符串到NSDate的日期转换

如何在 [NSDate 日期] 当天 00:00 获取 NSDate?

如何从 NSDate 获取当前日期、时间、年份?