我正在尝试将字符串转换为NSDate对象。我使用以下代码进行转换:
NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
NSTimeZone *tz = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormat setDateFormat:@"M/d/yyyy HH:mm:ss a"];
[dateFormat setTimeZone:tz];
NSDate * dtEventStart = [dateFormat dateFromString:@"1/7/2013 6:30:00 AM"];
NSDate * dtEventEnd = [dateFormat dateFromString:@"1/7/2013 8:45:00 PM"];
NSLog(@"dtEventStart: %@", dtEventStart);
NSLog(@"dtEventEnd: %@", dtEventEnd);
但是,输出如下所示:
dtEventStart: 2013-01-07 00:30:00 +0000
dtEventEnd: 2013-01-07 12:45:00 +0000
输出时间和日期与用于转换的字符串不同。我也尝试过使用EST作为timeZone,但会产生不同的错误结果,如下所示:
dtEventStart: 2013-01-07 05:30:00 +0000
dtEventEnd: 2013-01-07 17:45:00 +0000
我知道我错过了什么,但我不知道是什么。非常感谢任何帮助。
谢谢
更新:
这是
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent * eventForCalendar = [EKEvent eventWithEventStore:eventStore];
eventForCalendar.title = event.title;
NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
NSTimeZone *tz = [NSTimeZone timeZoneWithAbbreviation:@"EST"];
[dateFormat setDateFormat:@"M/d/yyyy HH:mm:ss a"];
[dateFormat setTimeZone:tz];
NSDate * dtEventStart = [dateFormat dateFromString:@"1/7/2013 6:30:00 AM"];
NSDate * dtEventEnd = [dateFormat dateFromString:@"1/7/2013 8:45:00 PM"];
NSLog(@"dtEventStart: %@", dtEventStart);
NSLog(@"dtEventEnd: %@", dtEventEnd);
eventForCalendar.startDate = dtEventStart;
eventForCalendar.endDate = dtEventEnd;
[eventForCalendar setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:eventForCalendar span:EKSpanThisEvent error:&err];
答案 0 :(得分:0)
对于解析,文档建议首先将日期格式化程序的语言环境设置为en_US_POSIX:
此外,这个Q& A on Date格式化程序:
http://developer.apple.com/library/ios/#qa/qa1480/_index.html
我正在使用NSDateFormatter来解析互联网风格的日期,但对于某些地区的某些用户来说,这会失败。我已经设置了一个特定的日期格式字符串;不应该强迫NSDateFormatter独立于用户的区域设置工作吗?
没有。虽然设置日期格式字符串似乎适用于大多数用户,但它不是解决此问题的正确方法。有许多地方格式字符串以意想不到的方式运行。例如:
答案 1 :(得分:0)
请尝试以下代码: -
NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate * dtEventStart = [dateFormat dateFromString:@"1/7/2013 6:30:00 AM"];
NSDate * dtEventEnd = [dateFormat dateFromString:@"1/7/2013 8:45:00 PM"];
NSLog(@"dtEventStart: %@", dtEventStart);
NSLog(@"dtEventEnd: %@", dtEventEnd);
您将获得24小时格式的以下输出: -
dtEventStart: 2013-01-07 06:30:00 +0000
dtEventEnd: 2013-01-07 20:45:00 +0000