Я хочу преобразовать "2014-07-15 06: 55: 14.198000 + 00: 00" эту строковую дату в NSDate в Swift.
попробуй это:
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 */)
Для дальнейшего запроса проверьте классы NSDateFormatter и DateFormatter платформы Foundation для Objective-C и Swift, соответственно.
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
yyyy-MM-dd hh:mm:ssZZZ
. Но я не могу получить объект даты из строки.
Swift 4
import Foundation
let dateString = "2014-07-15" // change to your date format
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: dateString)
println(date)
Свифт 3
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)
Я могу сделать это с помощью этого кода.
dd
вместо DD
должно помочь решить проблему «всегда январь».
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()
hh
должно быть HH
в этом случае.
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)
}
Первое, что 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.
(Если вы пишете расширение на String, ваш код полностью "перевернут" - вы не можете использовать любые вызовы dateFormatter!)
Обратите внимание, что обычно у вас будет несколько таких глобальных комбинаций, таких как "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" и т.д.
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 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, многие префиксы 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)
df.date(from: beginDateString)
, я получаю ноль! Зачем? ( df = DateFormatter()
)
Быстрые расширения поддержки, с расширением вы можете добавить новую функциональность к существующим типам class
, structure
, enumeration
или protocol
.
Вы можете добавить новую функцию init
в объект NSDate
, убрав объект с помощью ключевого слова extension
.
extension NSDate
{
convenience
init(dateString:String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyyMMdd"
dateStringFormatter.locale = NSLocale(localeIdentifier: "fr_CH_POSIX")
let d = dateStringFormatter.dateFromString(dateString)!
self.init(timeInterval:0, sinceDate:d)
}
}
Теперь вы можете запустить объект NSDate, используя:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
df.date(from: beginDateString)
, я получаю ноль! Зачем? ( df = DateFormatter()
)
ДЛЯ 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
}
}
ПРИМЕЧАНИЕ: ЭТО ВОЗВРАЩАЕТ ОРИГИНАЛЬНУЮ СТРИНУЮ, ЧТО ОШИБКА
Эта работа для меня..
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!)
}
Чтобы добавить String в формат даты в Swift, я сделал это
var dataFormatter:NSDateFormatter = NSDateFormatter()
dataFormatter.dateFormat = "dd-MMMM 'at' HH:mm a"
cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)
Вы можете попробовать этот быстрый код
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
Ниже приведены некоторые варианты преобразования формата строки в дату в быстрой iOS.
Thursday, Dec 27, 2018
формат Thursday, Dec 27, 2018
= EEEE, MMM d, yyyy
12/27/2018
формат = MM/dd/yyyy
12/27/2018
MM/dd/yyyy
12-27-2018 09:59
формат = MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
формат Dec 27, 9:59 AM
= MMM d, h:mm a
December 2018
формат = MMMM yyyy
Dec 27, 2018
формат Dec 27, 2018
= MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
формат = E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
формат = yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
формат = dd.MM.yy
09:59:19.815
формат = HH:mm:ss.SSS
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
}
import Foundation
let now : String = "2014-07-16 03:03:34 PDT"
var date : NSDate
var dateFormatter : NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6: __NSDate = 2014-07-16 03:03:34 PDT