Как я могу преобразовать дату в строку в NSDate?
Я хочу конвертировать "2014-07-15 06:55:14.198000+00:00" эта строка датируется NSDate в Swift.
15 ответов:
попробуйте это:
let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = /* find out and place date format from * http://userguide.icu-project.org/formatparse/datetime */ let date = dateFormatter.dateFromString(/* your_date_string */)
для дальнейшего запроса см. документация.
Swift 3 и позже (Swift 4 включены)
let dateFormatter = DateFormatter() dateFormatter.dateFormat = /* date_format_you_want_in_string from * http://userguide.icu-project.org/formatparse/datetime */ guard let date = dateFormatter.date(from: /* your_date_string */) else { fatalError("ERROR: Date conversion failed due to mismatched format.") } // use date constant here
import Foundation var dateString = "2014-07-15" // change to your date format var dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" var date = dateFormatter.dateFromString(dateString) println(date)
Я могу сделать это с помощью этого кода.
func convertDateFormatter(date: String) -> String { let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format dateFormatter.timeZone = NSTimeZone(name: "UTC") let date = dateFormatter.dateFromString(date) dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format dateFormatter.timeZone = NSTimeZone(name: "UTC") let timeStamp = dateFormatter.stringFromDate(date!) return timeStamp }
обновлено для Swift 3.
func convertDateFormatter(date: String) -> String { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! let date = dateFormatter.date(from: date) dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! let timeStamp = dateFormatter.string(from: date!) return timeStamp }
Если вам нужно будет часто анализировать строку в дату, вы можете переместить функциональность в расширение. Я создал sharedCode.swift файл и положить мои расширения там:
extension String { func toDateTime() -> NSDate { //Create Date Formatter let dateFormatter = NSDateFormatter() //Specify Format of String to Parse dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx" //Parse into NSDate let dateFromString : NSDate = dateFormatter.dateFromString(self)! //Return Parsed Date return dateFromString } }
затем, если вы хотите преобразовать свою строку в NSDate, вы можете просто написать что-то вроде:
var myDate = myDateString.toDateTime()
подробности
Swift 4, xCode 9.2 / Swift 3, xCode 8.2.1
расширения формата даты
import Foundation extension DateFormatter { convenience init (format: String) { self.init() dateFormat = format locale = Locale.current } } extension String { func toDate (format: String) -> Date? { return DateFormatter(format: format).date(from: self) } func toDateString (inputFormat: String, outputFormat:String) -> String? { if let date = toDate(format: inputFormat) { return DateFormatter(format: outputFormat).string(from: date) } return nil } } extension Date { func toString (format:String) -> String? { return DateFormatter(format: format).string(from: self) } }
использование
var dateString = "14.01.2017T14:54:00" let format = "dd.MM.yyyy'T'HH:mm:ss" let date = Date() print("original String with date: \(dateString)") print("date String() to Date(): \(dateString.toDate(format: format)!)") print("date String() to formated date String(): \(dateString.toDateString(inputFormat: format, outputFormat: "dd MMMM")!)") print("format Date(): \(date.toString(format: "dd MMM HH:mm")!)")
результат
дополнительная информация
Для Swift 3
func stringToDate(_ str: String)->Date{ let formatter = DateFormatter() formatter.dateFormat="yyyy-MM-dd hh:mm:ss Z" return formatter.date(from: str)! } func dateToString(_ str: Date)->String{ var dateFormatter = DateFormatter() dateFormatter.timeStyle=DateFormatter.Style.short return dateFormatter.string(from: str) }
фрагменты кода на этой странице QA"перевернуты"...
Первое, что упоминает Apple, это то, что вы кэшируете свой форматер...
ссылка на Apple doco о том, как именно это сделать:
форматирование кэша для эффективности Создание модуля форматирования даты-это не дешевая операция. ...кэширование одного экземпляра...
использовать глобальные...
let df : DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" return formatter }()
потом просто используйте этот форматер в любом месте...
let s = df.string(from: someDate)
или
let d = df.date(from: someString)
или использовать любой из других многих, многих удобных методов DateFormatter.
Это просто.
(если вы пишете расширение на строку, ваш код полностью "перевернут" - вы не можете использовать вызовы dateFormatter!)
обратите внимание, что обычно у вас будет несколько таких глобалов .. такие как" formatForClient "" formatForPubNub "" formatForDisplayOnInvoiceScreen".. так далее.
расширения поддержки Swift, с расширением вы можете добавить новую функциональность к существующему
class
,structure
,enumeration
илиprotocol
тип.вы можете добавить новый
начиная с Swift 3, Многие префиксы NS были отброшены.
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" /* date format string rules * http://userguide.icu-project.org/formatparse/datetime */ let date = dateFormatter.date(from: dateString)
Swift 3,4:
2 полезные преобразования:
string(from: Date) // to convert from Date to a String date(from: String) // to convert from String to Date
использование: 1.
let date = Date() //gives today's date let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd.MM.yyyy" let todaysDateInUKFormat = dateFormatter.string(from: date)
2.
let someDateInString = "23.06.2017" var getDateFromString = dateFormatter.date(from: someDateInString)
ДЛЯ SWIFT 3.1
func convertDateStringToDate(longDate: String) -> String{ /* INPUT: longDate = "2017-01-27T05:00:00.000Z" * OUTPUT: "1/26/17" * date_format_you_want_in_string from * http://userguide.icu-project.org/formatparse/datetime */ let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" let date = dateFormatter.date(from: longDate) if date != nil { let formatter = DateFormatter() formatter.dateStyle = .short let dateShort = formatter.string(from: date!) return dateShort } else { return longDate } }
ПРИМЕЧАНИЕ: ЭТО ВЕРНЕТ ИСХОДНУЮ СТРОКУ, ЕСЛИ ОШИБКА
чтобы добавить строку в формате даты в Swift, я сделал это
var dataFormatter:NSDateFormatter = NSDateFormatter() dataFormatter.dateFormat = "dd-MMMM 'at' HH:mm a" cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)
эта работа для меня..
import Foundation import UIKit //dateString = "01/07/2017" private func parseDate(_ dateStr: String) -> String { let simpleDateFormat = DateFormatter() simpleDateFormat.dateFormat = "dd/MM/yyyy" //format our date String let dateFormat = DateFormatter() dateFormat.dateFormat = "dd 'de' MMMM 'de' yyyy" //format return let date = simpleDateFormat.date(from: dateStr) return dateFormat.string(from: date!) }
Swift: iOS if we have string, convert it to NSDate, var dataString = profileValue["dob"] as String var dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "MM-dd-yyyy" // convert string into date let dateValue:NSDate? = dateFormatter.dateFromString(dataString) if you have and date picker parse date like this // to avoid any nil value if let isDate = dateValue { self.datePicker.date = isDate }