2017-03-22 46 views
-1

我從XML文件轉換日期字段,這些日期存儲在「yyyyMMddHHmmss」格式。當我使用DateFormmater的日期函數時,我沒有得到正確的時間。所以對於dateString「20150909093700」,它返回「2015-09-09 13:37:00 UTC」而不是「2015-09-09 09:37:00」。在存儲Core Data NSDate字段之前,我正在進行這種轉換。從dateformatter獲取錯誤時間

這是我的代碼:

static func stringToDate(DateString dateString: String) -> NSDate? { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyyMMddHHmmss" 
    dateFormatter.locale = Locale.init(identifier: "en_US_POSIX") 
    dateFormatter.timeZone = TimeZone(abbreviation: "EST") 

    if let date = dateFormatter.date(from: dateString) { 
     return date as NSDate? 
    } 

    return nil 

} 
+1

您正在添加時區'dateFormatter.timeZone = TimeZone(縮寫:「EST」)'計算日期時使用此時區的偏移量。只是UTC時區。 – rckoenes

+1

@rckoenes OP的代碼很好。他們只是誤解了看'日期'值的輸出。這已經在這裏覆蓋了很多次。 – rmaddy

+0

@rmaddy第二次閱讀,你可能是對的。 – rckoenes

回答

0

@ user30646 - 看看這是有道理的。使用您的確切功能:

func stringToDate(DateString dateString: String) -> NSDate? { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyyMMddHHmmss" 
    dateFormatter.locale = Locale.init(identifier: "en_US_POSIX") 
    dateFormatter.timeZone = TimeZone(abbreviation: "EST") 

    if let date = dateFormatter.date(from: dateString) { 
     return date as NSDate? 
    } 

    return nil 

} 

let dateString = "20150909093700" 

let returnedDate = stringToDate(DateString: dateString) 

print("Date without formatting or Time Zone: [", returnedDate ?? "return was nil", "]") 

let dFormatter = DateFormatter() 
dFormatter.timeZone = TimeZone(abbreviation: "EST") 
dFormatter.dateStyle = .full 
dFormatter.timeStyle = .full 

print("Result with formatting and Time Zone: [", dFormatter.string(from: returnedDate as! Date), "]") 

你得到了「正確的時間」 ......你只是覺得你不是因爲你看錯字符串表示的該日期/時間

+0

解釋。謝謝! – user30646