在AmazonSDKUtil.m
中,我们有以下方法:
+(NSDate *)convertStringToDate:(NSString *)string usingFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:dateFormat];
[dateFormatter setLocale:[AmazonSDKUtil timestampLocale]];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDate *parsed = [dateFormatter dateFromString:string];
NSDate *localDate = [parsed dateByAddingTimeInterval:_clockskew];
[dateFormatter release];
return localDate;
}
+(NSString *)convertDateToString:(NSDate *)date usingFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateFormatter setDateFormat:dateFormat];
[dateFormatter setLocale:[AmazonSDKUtil timestampLocale]];
NSDate *realDate = [date dateByAddingTimeInterval:-1*_clockskew];
NSString *formatted = [dateFormatter stringFromDate:realDate];
[dateFormatter release];
return formatted;
}
在旧版本的 SDK 中,语言环境和时区未正确设置为en_US
and GMT
。根据您的设备区域设置和时区设置,这可能会导致问题。最新版本的 SDK 修复了该问题。如果由于某种原因无法更新 SDK,您可以修改AmazonSDKUtil.m
并显式设置语言环境和时区值。
编辑:
如果您在 iOS 6 和 iOS 7 上运行以下代码片段,您可以看到语言环境设置如何影响日期格式。
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"PDT"];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSString *dateWithoutTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date 1: %@", dateWithoutTimezoneAndLocale);
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *dateWithTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date 2: %@", dateWithTimezoneAndLocale);
在 iOS 6 上
Date 1: Wed, 25 Sep 2013 16:25:29 PDT
Date 2: Wed, 25 Sep 2013 23:25:29 GMT
在 iOS 7 上
Date 1: Wed, 25 Sep 2013 16:24:11 GMT-7
Date 2: Wed, 25 Sep 2013 23:24:11 GMT
如您之前所述,iOS 7 中的行为发生了NSDateFormatter
变化;但是,此问题的根本原因是您没有将语言环境明确设置为en_US
. 当语言环境设置为 以外的其他en_US
内容时,可能会导致问题。这就是为什么我们在最新版本的 SDK 中明确设置区域设置,以便它可以在具有任何区域设置的设备上运行。
希望这是有道理的,