2017-06-18 96 views
-4

我的API,其中的參數之一就是其格式爲「DD.MM.YYYY」 Date類型的工作形式。轉換日期爲「DD.MM.YYYY」斯威夫特

我不能設法,將其轉換我創造了日期的延長,我試圖執行這樣說:

extension Date { 

    var shortDate: Date { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "dd.MM.yyyy" 
    let strDate = formatter.string(from: self) 
    let modifiedDate = formatter.date(from: strDate) 
    return modifiedDate! 
    } 
} 

,我這樣稱呼它:

let day = Date().shortDate 

不幸的是,這是行不通的,它看起來像這個:

2017年6月18日21:00:00 +0000

我該如何解決呢?

+0

這是正確的。你期待什麼結果? – Sulthan

+0

@Sulthan我期待以格式18.06.2017獲得號碼 – Melany

+0

您正在返回日期。日期沒有格式,也沒有時區。你爲什麼不返回可能包含正確結果的'strDate'? – Sulthan

回答

1

根據我的理解,您需要使用表示日期格式的API "dd.MM.yyyy」進行通信。下面是簡單的功能,你需要實現:

class MyAPIFunctions 
{ 
    static let formatter: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.dateFormat = "dd.MM.yyyy" 

     // make sure the following are the same as that used in the API 
     formatter.timeZone = TimeZone(secondsFromGMT: 0) 
     formatter.locale = Locale.current 

     return formatter 
    }() 

    class func shortString(fromDate date: Date) -> String { 
     return formatter.string(from: date) 
    } 

    class func date(fromShortString string: String) -> Date? { 
     return formatter.date(from: string) 
    } 
} 

我宣佈formatter作爲一個獨立的恆定,以節省重新初始化的開銷與每個調用。 一旦你已經添加了這些功能,您可以發送日期到API如下:

let today = Date() 
let todayString = MyAPIFunctions.shortString(fromDate: today) 
// send todayString to API 

在API中的字符串轉換爲Date對象,

let apiString = "17.07.2017" 
guard let apiDate = MyAPIFunctions.date(fromShortString: apiString) else { 
    // deal with formatting error here 
    return 
} 
// work with apiDate object 
+1

不要忘記,當解析/編碼API格式時,您應該始終設置語言環境,否則噹噹前語言環境使用非格利尼日曆時,您可以獲得令人驚喜的結果。 – Sulthan

0
let date = Date.init() 
     let formatter = DateFormatter() 
     formatter.dateFormat = "dd-MM-yyyy" 

     formatter.locale = NSLocale(localeIdentifier: "en_US") as Locale! 
     let strdate1 = formatter.string(from: date as Date) 

     print(strdate1) 
+0

當然感謝您的回答,但問題是如何將日期轉換爲字符串。但如何將日期轉換爲日期。那從我這邊來說並不聰明。 – Melany

+0

儘管此代碼可能(或可能不)回答這個問題,但應該始終解釋它的功能以及它如何解決問題。 – BDL