2015-03-06 25 views
5

Ok. Điều này khiến tôi bối rối. Tôi đang cố gắng để kéo một chuỗi ngày từ một nút và định dạng là một ngày để được lưu trữ trong CoreData.Định dạng ngày Swift

Đây là mã của tôi:

let dateStr = setDateBTN.titleLabel?.text 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "MM-dd-YYYY" 
let date:NSDate = dateFormatter.dateFromString(dateStr!)! 

Nếu tôi làm một println trên dateStr tôi nhận được như sau: 2015/03/10 Sau đó, nếu tôi ngay lập tức println ngày tôi nhận được: 2014/12/21 05 : 00: 00 +0000

Bất kỳ ý tưởng nào về lý do tại sao ngày thực tế thay đổi khi tôi chạy nó qua trình định dạng ngày?

Cảm ơn trước,
bnjmnmyers

+2

Lookup tài liệu: Định dạng trong nhiều năm qua là "yyyy" với chữ thường y. (Và bạn không phải là người đầu tiên ở đây để làm cho lỗi này :) –

+0

Cảm ơn, Martin. Ban đầu tôi đã có nó như chữ thường và một cái gì đó khác không được làm việc vì vậy tôi chỉ trong một nắm bắt để được giúp đỡ thay đổi nó thành chữ hoa. –

+0

Tôi vừa phát hành một thư viện có thể giúp làm việc với NSDate trong Swift; hy vọng nó sẽ giúp: https://github.com/malcommac/SwiftDate – danielemm

Trả lời

8

NSDateFormatter Lớp tham khảo: http://goo.gl/7fp9gl

ngày Formatting Guide (Apple): http://goo.gl/8zRTQl

Một sai lầm phổ biến là sử dụng YYYY. yyyy chỉ định năm dương lịch trong khi YYYY chỉ định năm (của "Tuần của năm"), được sử dụng trong lịch theo tuần ISO.

Mã của bạn nên làm việc, như bạn mong đợi, như thế này:

let dateStr = setDateBTN.titleLabel?.text 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "MM-dd-yyyy" 
let date:NSDate = dateFormatter.dateFromString(dateStr!)! 
+0

lưu ý rằng trong iOS hiện đại trên mỗi Apple, bạn phải thực hiện điều này: https://stackoverflow.com/a/42370648/294884 (thật dễ dàng hơn!) – Fattie