2017-03-01 34 views
19

Próbuję przekonwertować NSDate na String, a następnie Zmień format. Ale kiedy przechodzę od NSDate do String, tworzy on białe spacje.Konwersja NSDate na ciąg w iOS Swift

let formatter = DateFormatter() 
let myString = (String(describing: date)) 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let yourDate: Date? = formatter.date(from: myString) 
formatter.dateFormat = "dd-MMM-yyyy" 
print(yourDate) 
+0

pokazać ur 'dzień spełnienia wymogu, to jest aktualna data lub jeszcze –

+0

jej aktualna data, dostaję z Datepicker – iOS

+0

pokaż "Datepicker" wynik –

Odpowiedz

61

na przykład, zrobić jak

let formatter = DateFormatter() 
// initially set the format based on your datepicker date 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 

let myString = formatter.string(from: Date()) 
// convert your string to date 
let yourDate = formatter.date(from: myString) 
//then again set the date format whhich type of output you need 
formatter.dateFormat = "dd-MMM-yyyy" 
// again convert your date to string 
let myStringafd = formatter.string(from: yourDate!) 

print(myStringafd) 

masz wyjścia jak

enter image description here

+0

, ale data nie ma odpowiedniego formatu musimy przekonwertować na podstawie o n nasz przeżycie –

+0

Dzięki Anbu to działa – iOS

2

Zaktualizowana code.update go.

let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let myString = formatter.string(from: date as Date) 
let yourDate: Date? = formatter.date(from: myString) 
formatter.dateFormat = "dd-MMM-yyyy" 
print(yourDate!) 
0

Po przeznaczeniu DateFormatter trzeba dać sformatowany ciąg następnie można przekształcić w ciąg jakby ten sposób

var date = Date() 
let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let myString = formatter.string(from: date) 
let yourDate: Date? = formatter.date(from: myString) 
formatter.dateFormat = "dd-MMM-yyyy" 
let updatedString = formatter.string(from: yourDate!) 
print(updatedString) 

wyjście

01-Mar-2017

17

Zawsze używam tego kodu podczas konwersji Date do String. (Swift 3)

extension Date 
{ 
    func toString(dateFormat format : String) -> String 
    { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = format 
     return dateFormatter.string(from: self) 
    } 

} 

i zadzwoń w ten sposób. .

let today = Date() 
today.toString(dateFormat: "dd-MM") 
1

Można użyć tego rozszerzenia:

extension Date { 

    func toString(withFormat format: String) -> String { 
     let formatter = DateFormatter() 
     formatter.dateFormat = format 
     let myString = formatter.string(from: self) 
     let yourDate = formatter.date(from: myString) 
     formatter.dateFormat = format 

     return formatter.string(from: yourDate!) 
    } 
} 

i używać go w kontrolerze widok jak ten (zastąpić < "rok"> z formatu):

yourString = yourDate.toString(withFormat: "yyyy") 
0

coś do należy pamiętać, że tworzenie formaterów polega na próbie ponownego użycia tego samego wystąpienia, o ile jest to możliwe, ponieważ formatery są dość kosztowne w obliczeniach. Poniżej znajduje się wzorzec, którego często używam w aplikacjach, w których mogę udostępnić ten sam formater w całej aplikacji, dostosowany from NSHipster.

extension DateFormatter { 

    static var sharedDateFormatter: DateFormatter = { 
     let dateFormatter = DateFormatter() 
     // Add your formatter configuration here  
     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
     return dateFormatter 
    }() 
} 

Zastosowanie:

let dateString = DateFormatter.sharedDateFormatter.string(from: Date()) 
1

DateFormatter ma pewne date fabryka style dla tych, zbyt leniwy, aby majstrować z ciągów formatowania.Jeśli nie potrzebujesz niestandardowego stylu, oto inna opcja:

extension Date { 
    func asString(style: DateFormatter.Style) -> String { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = style 
    return dateFormatter.string(from: self) 
    } 
} 

To daje następujące style:

short, medium, long, full 

Przykład użycia:

let myDate = Date() 
myDate.asString(style: .full) // Wednesday, January 10, 2018 
myDate.asString(style: .long) // January 10, 2018 
myDate.asString(style: .medium) // Jan 10, 2018 
myDate.asString(style: .short) // 1/10/18