【问题标题】:Convert NSString to NSDate Using NSDateFormatter使用 NSDateFormatter 将 NSString 转换为 NSDate
【发布时间】:2016-02-18 09:24:15
【问题描述】:

试图将 NSString 转换为 NSDate

NSString *startDateForCal='09-03-2016 08:00:00 AM'
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"dd-MM-yyyy HH:mm:ss a"];
NSDate * EventStart = [dateFormatter dateFromString: startDateForCal];

但是得到混合结果为“2016-03-09 18:30:00 +0000”返回日期正确但时间与字符串不匹配欢迎任何建议

谢谢

【问题讨论】:

  • 您当地的时区是?
  • @Avi : 我的时区 IST
  • 您的代码或输出没有任何问题。
  • 我编辑我的问题。但我的日期格式与字符串不同
  • 这不是你的真实代码。请显示真实代码。 NSString *startDateForCal='09-03-2016 08:00:00 AM' 不能是您的真实代码。没有分号,单引号也不能这样用。获取您的绝对真实代码并将其复制并粘贴到问题中。然后获取结果并复制并粘贴它。

标签: ios objective-c iphone nsdate nsdateformatter


【解决方案1】:

应该是

[dateFormatter setDateFormat: @"dd-MM-yyyy hh:mm:ss a"];

即小时没有大写HH。 HH 以 24 格式返回小时 更多详情Click now

关于日期错误, 由于您设置了错误的时间格式(作为 HH 而不是 hh),因此将时间设置为 12:00 AM 并以 GMT 时区显示(IST - 5 个半小时,因此在您的情况下为 12:00 AM - 5: 30 = 前一天的 18:30),我猜你没有正确设置语言环境。

设置语言环境(快速),

dateFormatter.locale = NSLocale(localeIdentifier:"en_IN")

【讨论】:

  • AMI 替换 hh 而不是 HH mystring "18-03-2016 11:00:00 AM " response "2016-03-18 05:30:00 +0000"
  • 正如我已经提到的,您需要正确设置您的语言环境。 11:30 - 5:30 = 5:30
  • 没有运气设置语言环境 [dateFormatter setLocale:[NSLocale currentLocale]];string '26-03-2016 09:00:00 AM' 输出:2016-03-26 03:30:00 +0000
  • 老兄,问题仅在于您当前的语言环境,但您将其分配回去。其实没什么区别。
  • dateFormatter.locale = NSLocale(localeIdentifier: "en_IN") 在目标 c 中使用它。我想你是我更新后的答案
【解决方案2】:

你的问题毫无意义。您的目标是从 NSString 获取 NSDate。你做到了,而且你成功地做到了。

你如何发现 NSDate 是,是完全不同的事情。默认情况下(在控制台中)以特定时区和格式向您表示。但这无关紧要;它仍然是同一个日期,而且是正确的日期。

【讨论】:

  • 它返回的日期正确但时间不正确,它应该像字符串
  • 时机成熟了。如果你展示你的真实代码和你的真实结果,你会看到你的 NSDate 时间显示为 GMT 是你作为 IST 的原始时间的正确表示。
  • 这感觉更像是评论而不是答案,您只是指出 OP 提出了一个不好的问题(这是真的),但您实际上并没有提供解决方案。 - From Review
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 2011-04-24
  • 2017-04-23
相关资源
最近更新 更多