无法从字符串转换日期

时间:2012-01-13 05:45:08

标签: iphone objective-c ios xcode

我正在使用以下链接http://iosdevelopertips.com/cocoa/date-formatters-examples-take-3.html进行申请,以便从字符串转换日期。

我通过以上教程链接使用下面的代码。当我NSlog PresentDateTime时,它给出20120111 13:03:49.263 + 05:30。

因此我采用此格式并希望转换为“EEEE MMMM d, YYYY h:mm a, zzz”格式。

当我将相同的内容分配给变量

时这样做
  

NSString * today = presentDateTime;

当我NSLog Datestring我得到结果NULL我能知道我哪里出错吗?请通过建议要做的更改来帮助我解决这个问题

//代码

 -(NSString *)DateFormat:(NSString *) presentDateTime

{


presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@"T" withString:@" "];
presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@" +" withString:@"+"];
presentDateTime = [presentDateTime stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"Present date::::%@",presentDateTime);

  NSString *today = presentDateTime;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss:SSSZZZ"];
NSDate *date = [dateFormat dateFromString:today];

[dateFormat setDateFormat:@"EEEE MMMM d, YYYY h:mm a, zzz"];
NSString *dateString = [dateFormat stringFromDate:date];
[dateFormat release];
NSLog(@"dateString:::Date>>>>:%@::::\n%@",dateString, presentDateTime);
return dateString;

4 个答案:

答案 0 :(得分:3)

用于解析日期的日期格式模式错误/不完整。对于字符串20120111 13:03:49.263+05:30,格式为YYYYMMdd HH:mm:ss.SSSZZZ。有关格式字符串模式,请参阅this table

修改:在使用代码后,结果显示时区NSDateParser上的+05:30扼流圈。它期望+0530,没有冒号。以下是删除它的方法:

    NSString *today = @"20120111 13:03:49.263+05:30";
    NSRange colon = [today rangeOfString:@":" options:NSBackwardsSearch];
    if (colon.location != NSNotFound) {
        today = [today stringByReplacingCharactersInRange:colon withString:@""];
    }
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"YYYYMMdd HH:mm:ss.SSSZZZ"];
    NSDate *date = [dateFormat dateFromString:today];
    NSLog(@"%@", date);

答案 1 :(得分:1)

解析原始日期字符串时,需要指定整个格式,如下所示:

[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss.SSSZZZ"]

答案 2 :(得分:-1)

将您的代码与以下内容进行比较

NSString *dateString = @"6:30 18 Oct";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm dd/MMM"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release];

它只是样本。并通过在nslog中打印它来弄清楚出了什么问题。

答案 3 :(得分:-2)

您的date变量始终为零,因为您的日期格式(yyyyMMdd)不完整,因为您的输入字符串today包含额外信息(20120111 13:03:49.263+05:30)。所以你可以裁剪不必要的字符:

if ([presentDateTime count] < 8) return nil;
NSString *today = [presentDateTime substringToIndex:8];

或者您应该指定@jonkroll

所述的完整日期格式