Vcal日期分析问题



我有以下字符串作为输入:

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY;CHARSET=utf-8:hello 
LOCATION;CHARSET=utf-8:loc 
DTSTART:20120704T053000Z
DTEND:20120704T073000Z
END:VEVENT
END:VCALENDAR

我面临的问题是我使用的日期部分:

    NSRange end = [Result rangeOfString:@"T"];
            NSString *DT=[NSString stringWithFormat:@"%@%@",[Result substringToIndex:end.location],[Result substringFromIndex:end.location+1]];
            NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
            [formatter setTimeZone:[NSTimeZone defaultTimeZone]];
            [formatter setDateFormat:@"yyyyMMddHHmmssZ"];
            NSDate *dt=[formatter dateFromString:DT];   
            myEvent.startDate=dt;
            [formatter release];

这里返回的dt为NULL,我做错了什么?

更新的代码:我更新了如下代码,现在可以获得日期,但需要问,我需要设置地区还是时区??

        [NSTimeZone resetSystemTimeZone]; 
        NSLocale *enUSPOSIXLocale;
        NSDateFormatter *sRFC3339DateFormatter = [[NSDateFormatter alloc] init];     
        if( [Result characterAtIndex:[Result length]-2] == 'Z')
        {   
            NSLog(@"in 1");
            [sRFC3339DateFormatter setDateFormat:@"yyyyMMdd'T'HHmmss"];
         }
        else 
        {
            NSLog(@"in 2");
            [sRFC3339DateFormatter setDateFormat:@"yyyyMMdd'T'HHmmssZ"];
        }
        NSDate *date = [sRFC3339DateFormatter dateFromString:[Result substringToIndex:[Result length]-2]];
        myEvent.startDate=date;

查看您的格式:

[formatter setDateFormat:@"yyyyMMddHHmmssZ"];

现在来看一个字符串示例:

20120704T073000Z

你错过了T。我不知道它是否需要逃跑,所以你可能想要这两种:

[formatter setDateFormat:@"yyyyMMddTHHmmssZ"];
[formatter setDateFormat:@"yyyyMMdd'T'HHmmssZ"];

请注意,结尾的Z意味着"UTC"——我不知道iOS是否会自动考虑到这一点,但这至少意味着将时区设置为默认时区会产生误导。我会把它设置为UTC,或者根本不设置。

@Jon是的,你是对的,这是我为它们指定Z的条目所做的,我将时区设置为GMT,并在此基础上计算Datentime,而不包含Z但直接超时的条目在这种情况下我不需要指定任何时区,由格式化程序处理。

    NSDateFormatter *sRFC3339DateFormatter = [[NSDateFormatter alloc] init];     
        if([Result rangeOfString:@"Z"].location != NSNotFound)
        {   
            Result=[Result substringToIndex:[Result length]-2];
            [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
            [sRFC3339DateFormatter setDateFormat:@"yyyyMMdd'T'HHmmss"];
         }
        else 
        {
           [sRFC3339DateFormatter setDateFormat:@"yyyyMMdd'T'HHmmssZ"];
        }
        NSDate *date = [sRFC3339DateFormatter dateFromString:Result];
        myEvent.startDate=date;
        [sRFC3339DateFormatter release];

相关内容

  • 没有找到相关文章