我正在使用以下代码格式化日期字符串:
这是日期字符串的格式: 2013-10-08T20:30:00 + 03:00
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setDateFormat:@"EEEE"];
NSDateFormatter *formmatter = [[NSDateFormatter alloc] init];
formmatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:SSSZZZ";
NSString *dataString = [meetingData objectForKey:@"start"];
if (![dataString isKindOfClass:[NSNull class]]) {
NSMutableString *mutableDate = [dataString mutableCopy];
[mutableDate deleteCharactersInRange:NSMakeRange(mutableDate.length - 3, 1)];
NSDate *gmtDate = [formmatter dateFromString:mutableDate];
NSDateFormatter *HHMM_Fromatter = [[NSDateFormatter alloc] init];
[HHMM_Fromatter setDateFormat:@"HH:mm"];
self.meetingTime = checkTheObject([HHMM_Fromatter stringFromDate:gmtDate]);
self.meetingDay = checkTheObject([dateFormatter stringFromDate:gmtDate]);
}
输出是self.meetingTime
:19:30
self.meetingDay
很好,我为什么要放松一小时?
答案 0 :(得分:1)
您的两个日期格式化程序HHMM_Fromatter
和dateFormatter
使用不同的区域设置,因此使用不同的时区。您应该将两个格式化程序的时区明确设置为同一区域(可能是[NSTimeZone localTimeZone]
)。
请注意,日期代码的其余部分似乎很脆弱。您不应该进行字符串计算以从字符串表示中删除时区。
NSDate
表示绝对时间点,不受时区或区域设置的影响。您应该将字符串解析为单个NSDate
,然后使用此日期来计算考虑时区的面向用户的字符串表示。