【问题标题】:How to convert this string into nsdate? [duplicate]如何将此字符串转换为nsdate? [复制]
【发布时间】:2012-11-27 14:45:52
【问题描述】:

可能重复:
convert string to nsdate

我有这个字符串Fri, 07 Dec 2012 08:40:33 +0100

如何将其转换为 NSDate

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MMM YYYY hh:mm:ss +HHmm"];
NSDate *myDate=[dateFormatter dateFromString:@"Fri, 07 Dec 2012 08:40:33 +0100"];
NSLog(@"-->%@",myDate);

nslog 给出

-->2012-12-06 19:30:33 +0000

此代码无法正常工作,请帮助。 谢谢!!!

【问题讨论】:

标签: objective-c cocoa nsdateformatter


【解决方案1】:

我认为您需要将最终的 +HHmm 更改为 ZZZZ

现在是时区,不是时间。

【讨论】:

  • 你有ZZZZ+ZZZZ吗?
  • 好的..现在是 --> 2012-12-07 07:40:33 +0000
  • 如果您希望以不同的格式输出,请使用第二个日期格式化程序。
  • 我希望结果与输入字符串中的格式相同
  • 那我放弃了。你想从什么转换成什么?您现在有了将起始字符串转换为 NSDate 对象的工作代码。
【解决方案2】:

你的代码几乎是正确的,但有一些错误。

首先年份不是YYYY 而只是yyyyhh 不是24 小时不正确,因为小时是24 小时,因此您应该使用HH。接下来是时区偏移量,不是+HHmm,而是Z。 现在最重要的部分,你的日期有一天和一个月作为书面语言,但应用程序可能在非英语语言上运行,因为解析不起作用,你必须添加一个语言环境。

完整代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"EN"]];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *myDate=[dateFormatter dateFromString:@"Fri, 07 Dec 2012 08:40:33 +0100"];
NSLog(@"-->%@",myDate);

【讨论】:

  • 它打印 07:40,我需要 08:40 的时间
  • 不,07:40 是正确的,时间显示为 GMT,与您的时间相差 1 小时,因此如果您将 NSDateFormatter 与系统时区一起使用,则正确的时间显示相对于时区偏移量。
  • 是的,现在我明白了。我对此非常愚蠢。
  • 我不能投票,我怎么能,我没有 15 分。
  • 我赢得了投票,所以先生。
【解决方案3】:

我检查了你的 cmets 的所有答案,我想说,你对时区感到困惑。

07:40 是格林威治标准时间,而您的时间是 08:40 +1000(一小时 00 分),所以它们是相同的。同样,在重新生成和打印时,它将在 GMT 中打印。

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"EN"]];
NSDate *myDate=[dateFormatter dateFromString:@"Fri, 07 Dec 2012 08:40:33 +0100"];
NSLog(@"--> %@",myDate);


NSString *rechange=[dateFormatter stringFromDate:myDate];

NSLog(@"==> %@",rechange);

【讨论】:

  • hh 小时格式不正确,因为在您应该使用 24 小时 HH 格式字符串的日期中没有 AM/PM 切换。
  • 并且您的代码将在默认语言未设置为英语的 iOS 设备上失败,就像可能回答说您需要提供本地语言一样。
  • 那么该怎么做呢? [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"EN"]]; 必须添加??
  • iphone和mac有区别吗?我只想要mac。这工作正常
  • 如果系统甚至 OSX 设置为荷兰语,例如,datformatter 将尝试将日期解析为荷兰语日期。 Dec 会很好,但 May 会是 Mei,它将无法解析,如果日期包含本地化元素,您应该始终设置语言环境。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2023-01-04
相关资源
最近更新 更多