0

我正在使用以下代码格式化日期字符串:

这是日期字符串的格式: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:30self.meetingDay很好,为什么我失去了 1 小时?

4

1 回答 1

1

您的两个日期格式化程序HHMM_FromatterdateFormatter使用不同的语言环境,因此使用不同的时区。您应该将两个格式化程序的时区显式设置为同一区域(可能[NSTimeZone localTimeZone])。

请注意,您的日期代码的其余部分似乎很脆弱。您不应该进行字符串计算来从字符串表示中删除时区。

NSDate表示绝对时间点,不受时区或语言环境的影响。您应该将字符串解析为一个NSDate,然后使用此日期来计算考虑时区的面向用户的字符串表示。

于 2013-10-08T09:02:41.470 回答