0

可能重复:
将字符串转换为 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

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

4

3 回答 3

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);
于 2012-12-10T08:02:32.353 回答
1

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

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);
于 2012-12-10T09:41:50.203 回答
0

我认为您需要将最终更改+HHmmZZZZ.

这是时区,而不是时间。

于 2012-12-10T07:37:54.577 回答