2017-05-31 55 views
0

我搜索在這裏SO卻找不到有用的線程來完成我想要的全球時區。我對Swift很陌生,所以我對此不太瞭解。所以情況是我想設置一個特定的時區,其可以通過與應用程序的設置用戶的變化。我想要的是當用戶更改應該反映出應用程序的所述時區時。是的,我可以設置時區中的每個「DateFormatter」,但我不希望每次我創建了一個DateFormatter時間來寫。設置DateFormatter

有沒有辦法,所以當我創建DateFormatter實例的時區已被設置爲在時區的用戶選擇?是否有可能使用DateFormatter的擴展來做到這一點?

回答

1

你可以做的是使Date擴展爲你這個TimeZone設置爲DateFormatter成甲酸你的約會,所以使兩個擴展一個Date,一個用於String

extension Date { 

    struct CustomDateFormatter { 

     static var currentTimeZone = TimeZone.current //Set default timeZone that you want 

     static func dateFormatter(withFormat format: String) -> DateFormatter { 
      let formatter = DateFormatter() 
      formatter.timeZone = CustomDateFormatter.currentTimeZone 
      formatter.dateFormat = format 
      return formatter 
     }    
    } 

    func toDateString(withFormat format: String) -> String { 
     return CustomDateFormatter.dateFormatter(withFormat: format).string(from: self) 
    } 
} 

extension String { 
    func toDate(withFormat format: String) -> Date? { 
     return Date.CustomDateFormatter.dateFormatter(withFormat: format).date(from: self) 
    } 
} 

現在,當以往任何時候都需要設置TimeZone或要轉換DateString,反之亦然使用這個擴展這樣的。

//Set timezone 
Date.CustomDateFormatter.currentTimeZone = TimeZone(abbreviation: "GMT")! 
//get date from String 
let date = "31-05-2017 07:30:05".toDate(withFormat: "dd-MM-yyyy HH:mm:ss") 
//get string from date with specific format 
let dateString = Date().toDateString(withFormat: "dd-MM-yyyy HH:mm:ss") 
+1

這工作得很好!謝謝! – SquareBox

+0

@SquareBox歡迎伴侶:) –