trong AmazonSDKUtil.m
, chúng tôi có các phương pháp sau:
+(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;
}
Trong các phiên bản cũ hơn của SDK, ngôn ngữ và múi giờ không được đặt chính xác thành en_US
và GMT
. Điều này có thể gây ra sự cố tùy thuộc vào cài đặt múi giờ của thiết bị và múi giờ của bạn. Phiên bản SDK mới nhất khắc phục sự cố. Nếu vì một lý do nào đó, bạn không thể cập nhật SDK, bạn có thể sửa đổi AmazonSDKUtil.m
và đặt rõ ràng các giá trị ngôn ngữ và múi giờ.
EDIT:
Nếu bạn chạy các đoạn mã sau đây trên iOS 6 và iOS 7, bạn có thể thấy cách locale đặt này ảnh hưởng định dạng ngày tháng.
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);
Trên iOS 6
Date 1: Wed, 25 Sep 2013 16:25:29 PDT
Date 2: Wed, 25 Sep 2013 23:25:29 GMT
Trên iOS 7
Date 1: Wed, 25 Sep 2013 16:24:11 GMT-7
Date 2: Wed, 25 Sep 2013 23:24:11 GMT
Như bạn đã nói trước đây, hành vi của NSDateFormatter
thay đổi trong iOS 7; tuy nhiên, nguyên nhân gốc rễ của vấn đề này là bạn không rõ ràng đặt ngôn ngữ thành en_US
. Khi ngôn ngữ được đặt thành một thứ khác ngoài en_US
, nó có thể gây ra sự cố.Đây là lý do tại sao chúng tôi đặt rõ ràng ngôn ngữ trong phiên bản SDK mới nhất của chúng tôi để nó chạy trên các thiết bị có bất kỳ cài đặt ngôn ngữ nào.
Hy vọng điều này có ý nghĩa,
Nguồn
2013-09-24 19:48:24
Tôi có cùng một vấn đề với aws ios sdk 1.4 –
Tôi có cùng một vấn đề; nhìn vào dữ liệu đang được gửi đến Amazon Tôi nhận thấy rằng định dạng của tiêu đề Ngày hơi khác giữa iOS6 và iOS7, và rất có thể đây là những gì sẽ ném trình phân tích cú pháp ngày vào cuối Amazon. iOS6: Ngày: Thứ Ba, 24 tháng 9 năm 2013 07:58:18 GMT + 10: 00 iOS7: Ngày: Thứ Ba, ngày 24 tháng 9 năm 2013 07:58:18 GMT + 10 Vì vậy, phần giờ của TZ bù đắp dường như bị thiếu trong iOS7. – patschiboy
để bạn giải quyết điều đó như thế nào ?, IS có phương pháp nào để giải quyết phần giờ này trong ios7 không? – pradeep