【问题标题】:NSDate gets wrong date from NSString [duplicate]NSDate 从 NSString 获取错误的日期 [重复]
【发布时间】:2014-02-22 00:07:21
【问题描述】:

我想要做的是有一个具有正确当前时间的 NSDate。当我将日期转换为字符串时,时间是正确的,但是当我转换回 NSDate 时,时间刚刚结束。

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm"];
[dateFormatter setLocale:[NSLocale currentLocale]];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSDate* myDate = [dateFormatter dateFromString:dateString];
NSLog(@"datete:%@ and %@", myDate, dateString);

2014-02-22 00:18:00 +0000 和 21-02-2014 16:18

【问题讨论】:

  • 如果您显示来自NSLog 的输出,这将非常有帮助。它可能没有错。这就是 NSDate 的登录方式 - 在 UTC 时区。
  • 顺便说一句 - 无需将日期格式化程序的区域设置为当前区域 - 这是默认设置。
  • 我用nslog更新了原帖。
  • @Bomiz 查看我的答案以了解问题的解释。

标签: ios nsdate nsdateformatter


【解决方案1】:

打印NSDate 对象时,请记住description 以UTC 格式返回日期。因此,如果您发现这两个对象之间存在差异,请务必考虑您的时区并将其添加到 NSDate 的打印值中。

当您想在日志和/或 UI 中正确打印它们时,您应该使用日期格式化程序,而不是直接打印 NSDate 对象。日期格式化程序采用本地时区和系统区域设置,并正确打印日期。

【讨论】:

  • 如何添加正确的数量?不同时区不同
  • @Bomiz 我的意思是在你的脑海中添加,这样你就可以检查正确性。 NSDate 对象不包含任何时区信息。当您想在日志和/或 UI 中正确打印它们时,您应该使用日期格式化程序,而不是直接打印 NSDate 对象。
  • 我正在做的是将当前日期保存为用户默认值。我无法保存格式化程序。所以我想把它转换回 NSDate 以便保存。但是是否可以将具有正确日期的 NSString 转换为包含与字符串相同日期的 NSDate?
  • @Bomiz Uhm,你为什么要把 NSDate 对象转换成任何东西?它可以按原样保存在用户默认值中。请参阅文档:developer.apple.com/library/mac/documentation/Cocoa/Reference/…
  • 对不起,解散这个问题。困扰我的是我修复的一些完全不同的代码块。不过还是谢谢!!!
猜你喜欢
  • 2014-01-18
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
相关资源
最近更新 更多