我有以下字符串作爲輸入: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;
@john謝謝你的答案我更新了我的代碼,所以現在我需要設置區域設置或時區? – 2012-08-04 09:08:32
@HBastan:我對蘋果API肯定不夠了解,但我會*建議*將語言環境設置爲某些「不變」語言環境(或者美國英語,如果沒有這種情況),並設置時區到UTC。請注意,對於沒有「Z」的值,該值表示一個* local *日期/時間 - 因此您應該使用vcal條目中指定的時區。是的,它變得棘手... – 2012-08-04 10:02:44