如何将邮件服务器日期字符串转换为nsdate

时间:2013-07-11 06:54:17

标签: ios nsdate nsdateformatter

我正在获取这样的日期字符串表单邮件服务器。星期四,2009年12月31日14:32:15 +0580 我想将此日期字符串转换为日期。

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
   NSString *inputstring=@"Mon, 3 sep 2012 08:32:39 +0580";
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
   [dateFormatter setLenient:YES];
   NSLocale *enUS = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
   [dateFormatter setLocale:enUS];
   NSDate *result = [dateFormatter dateFromString:inputstring];
   NSLog(@"test==%@",result);
}

我的输出为null。

例外输出:2012-09-03 03:02:39 +0000

4 个答案:

答案 0 :(得分:2)

第一个问题:您没有尝试读取字符串上的“Tue”。 (将“EEE”添加到格式的前面)

第二个也是更大的问题:+0580不是有效的时区。几年前有一个PHP错误错误地将IST(+0530)作为+0580返回。 +0580毫无意义。这意味着5小时80分钟。因此,您可以执行以下两项操作之一:在处理之前将+0580替换为+0530 将日期格式化程序时区设置为IST并从字符串中删除+0580。

我看到你接受了另一个答案,但那个答案“有效”,因为它无法解析最后一部分而忽略了时区。我跑了然后 2013-07-09 08:32:38 +0000 (这与 2013-07-09 08:32:39 +0580 不一样)

删除已接受答案格式的+会导致格式化程序正确解析,但由于时区无效,您将获得null。将时区更改为+0530可得到 2013-07-09 03:02:39 +0000

的预期结果

答案 1 :(得分:1)

替换

[dateFormatter setDateFormat:@"d MMM yyyy HH:mm:ss ZZZ"];

[dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss zzzz"];

答案 2 :(得分:1)

只需将以下代码复制并粘贴到项目中并运行,即可查看结果

NSString *dateString = @"Tue, 9 Jul 2013 08:32:39 +0580";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MM yyyy hh:mm:ss +zzzz"];
NSDate *dateFromString;
dateFromString = [dateFormatter dateFromString:dateString];

NSLog(@"test==%@",dateFromString);

答案 3 :(得分:1)

@Raviteja Kammila使用以下代码作为日期格式,如2013-07-09 03:02:39 +0000

    NSString *dateString = @"Tue, 9 Jul 2013 08:32:39 +0580";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MM yyyy HH:mm:ss +zzzz"];
    NSDate *date = [dateFormatter dateFromString:dateString];
    NSLog(@"final date : %@",date);