Xin chúc mừng, bạn đã tìm thấy hơn oddities múi giờ! Bạn đúng là việc thay đổi múi giờ của bạn sẽ khắc phục được sự cố. Chúng ta hãy chơi gameunking và xem liệu chúng ta có thể tìm ra lý do tại sao!
Đầu tiên, chúng tôi sẽ cố gắng và tìm mọi múi giờ nơi weirdness điều này xảy ra:
NSArray *tzs = [NSTimeZone knownTimeZoneNames];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
f.dateFormat = @"MMyyyy";
for (NSString *name in tzs) {
f.timeZone = [NSTimeZone timeZoneWithName:name];
NSDate *date = [f dateFromString:@"062008"];
if (date == nil) {
NSLog(@"%@", name);
}
}
này sẽ lặp qua tất cả các múi giờ được biết đến và cố gắng phân tích cú pháp "062.008" trong múi giờ đó. Nếu chúng ta chạy này, chúng tôi thấy rằng nó có thể ghi:
Africa/Casablanca
Asia/Karachi
Vì vậy, tôi đoán rằng bạn sống ở một trong hai Casablanca hoặc Karachi (vì theo mặc định, NSDateFormatter
của bạn được khởi tạo với múi giờ của bạn, đó là lý do tại sao bạn đang gặp vấn đề này, có thể là Casablanca, cho rằng bạn có vẻ là 1 giờ trước GMT).
Hãy xem liệu chúng ta có thể tìm ra những gì là lạ với những múi giờ:
$ zdump -v Africa/Casablanca
... snip ...
Africa/Casablanca Sun Jun 1 00:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 WEST isdst=1
... snip ...
$ zdump -v Asia/Karachi
... snip ...
Asia/Karachi Sat May 31 19:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 PKST isdst=1
... snip ...
đủ chắc, có vẻ như cả hai Casablanca và Karachi bỏ qua giờ nửa đêm ngày 01 tháng 6 năm 2008. Do đó, bạn thực chất cho nó một ngày không thể phân biệt, và nó trở về nil
. Tóm lại.
Trong trường hợp này, câu trả lời đúng là để thay đổi múi giờ của bạn (GMT có thể là lựa chọn tuyệt vời), vì cơ hội là chuỗi này bạn đang phân tích không đến từ đầu vào của người dùng (được định dạng lạ) và do đó cần được phân tích cú pháp theo múi giờ chuẩn. Và mặc dù tôi chắc chắn rằng Casablanca và Karachi là những nơi thực sự gọn gàng, múi giờ của họ không chính xác là những thứ phổ biến ...
TL; DR:
Giờ tiết kiệm ánh sáng ban ngày phải được bãi bỏ.
Viết câu trả lời của riêng bạn và nhấp vào câu trả lời của bạn - câu trả lời sẽ giúp bạn nhận điểm và làm rõ hơn cho những người khác theo dõi. –
Và trong câu trả lời của bạn, bạn có thể giải thích chi tiết hơn: Làm thế nào nó liên quan đến múi giờ? OK, thay đổi múi giờ thành GMT "cố định" nó, nhưng đã làm * thực sự * sửa nó? Có vấn đề gì thế? Nếu đó thực sự là một sửa chữa và không chỉ là một băng, thì nó giải quyết vấn đề như thế nào? –
Nhân tiện: Múi giờ nào là * bạn *? Khi tôi chạy mã đó, và dường như khi Hussain Shabbir (từ các câu trả lời) chạy nó, cả hai chúng ta đều có một ngày cho '@" 062008 "'. Bạn không, vì vậy, múi giờ và lịch là trình định dạng của bạn bằng cách sử dụng? Nếu bạn để mặc định ở chế độ mặc định, hệ thống của bạn sẽ đặt múi giờ và lịch nào? –