Преобразование NSDate в строку в iOS Swift [дубликат]

этот вопрос уже есть ответ здесь:

Я пытаюсь преобразовать NSDate до String, а затем изменить формат. Но когда я прохожу NSDate to String Он создает пробелы.

 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)

7 ответов


вы получаете подробную информацию от Apple Dateformatter Документ.Если вы хотите установить dateformat для вашего dateString, см. Это ссылке, dateformat детали вы можете получить здесь для e.g, do like

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

let myString = formatter.string(from: Date()) // string purpose I add here 
// 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)

вы получаете вывод как

enter image description here


Я всегда использую этот код при преобразовании Date to String . (Swift 3)

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

}

и звонок такой . .

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

ваш обновленный код.обновлять его.

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!)

DateFormatter имеет некоторые стили заводской даты для тех, кто слишком ленив, чтобы возиться со строками форматирования. Если вам не нужен пользовательский стиль, вот еще вариант:

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

это дает вам следующие стили:

short, medium, long, full

пример использования:

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

что-то нужно иметь в виду при создании форматеров, чтобы попытаться повторно использовать тот же экземпляр, если вы можете, поскольку форматтеры довольно вычислительно дороги для создания. Ниже приведен шаблон, который я часто использую для приложений, где я могу поделиться одним и тем же приложением форматирования, адаптированным из 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
    }()
}

использование:

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

Вы можете использовать это расширение:

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!)
    }
}

и используйте его в своем контроллере вида, как это (замените своим форматом):

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

после выделения DateFormatter вам нужно дать отформатированную строку тогда вы можете преобразовать как строку, как этот путь

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)

выход

01-Mar-2017