【问题标题】:dateFromString results wrong datedateFromString 结果错误的日期
【发布时间】:2016-12-17 10:14:07
【问题描述】:

我正在尝试将 NSString 转换为 NSDate,然后将其存储在 Core Data 上。我将时区添加到 NSDateFormatter 仍然返回错误的输出。并以不同的格式存储在 Core Data 中。

NSString *dateString=@"2015-09-17 01:06:44";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
dateFormatter.locale = [NSLocale currentLocale];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date_f = [dateFormatter dateFromString:dateString];

NSLog(@"date string %@",dateString);
NSLog(@"date %@",date_f);


 NSManagedObject *events=[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:app.context];
[events setValue:date_f forKey:@"start_date"];

控制台输出是

date string 2015-09-17 01:06:44
date 2015-09-16 19:36:44 +0000

数据存储在Core Data中,如下所示

start_date = "September 17, 2015";

谢谢。

【问题讨论】:

  • 您的时区是UTC+05:30 不是吗? NSLog 以 UTC 格式打印日期。
  • 是的,它的 UTC+05:30
  • date 2015-09-17 01:06:44 +0000 现在它的打印正确...但是在将其存储在核心数据上时,格式为September 17, 2015
  • 如果Core Data属性的类型是NSDate,那么显示的格式就没有关系,因为NSDate实际上只是一个Double的值。
  • 但它没有以所需的格式保存......它没有保存时​​间,只保存了日期。!!

标签: ios objective-c iphone core-data


【解决方案1】:

这看起来像是对时区转换的误解。过去也让我有些头疼的事情:)

这是完成的:

  • 你有一个日期字符串
  • 你说这个日期字符串是本地时区
  • 您将字符串转换为 NSDate
  • NSDate 现在是 UTC 日期,因为 NSDate 对象中没有时区信息

现在,关于 Core Data 和 NSManagedObject,您可以check this answer。我不知道您目前是如何获得这个 start_date 值的,但首先要检查您的核心数据配置。

希望这会有所帮助。

【讨论】:

  • 感谢您的解释...核心数据接受start_date 格式为NSDate
  • 好的,但是您如何打印您在此处显示的 start_date 值? NSLog 从 Core Data 读取后?
  • 是的,我使用NSLog 打印的格式是September 17, 2015
  • 好吧,同一类型的NSLog 结果不同是出乎意料的。你检查过你的核心数据条目的类型吗?您是否尝试将 start_date 格式化为字符串以查看其所有组件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多