Chuỗi định dạng của bạn gần giống, nhưng bạn muốn chỉ định mili giây bằng SSS
, quá:
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSX"];
Ngoài ra, Z
trong chuỗi ngày của bạn là viết tắt của "Zulu" (tức là GMT / UTC), vì vậy dateFormat
của bạn nên sử dụng Z
hoặc X
không có dấu ngoặc kép để nó phân tích cú pháp chính xác múi giờ của chuỗi. Ngoài ra, nếu bạn đang xây dựng chuỗi từ các ngày, hãy đảm bảo đặt múi giờ của bạn cho phù hợp. Bạn cũng muốn đặt ngôn ngữ của mình:
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = enUSPOSIXLocale;
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSX";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
Xem Hỏi và Đáp kỹ thuật QA1480 để biết thêm thông tin.
Bạn cũng có thể sử dụng NSISO8601DateFormatter
mới hơn , giúp bạn thoát khỏi một số cỏ dại đó:
NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithFullDate | NSISO8601DateFormatWithFullTime | NSISO8601DateFormatWithFractionalSeconds;