如何将字符串Date转换为NSDate?

我想将“ 2014-07-15 06:55:14.198000+00:00 ”此字符串日期转换为Swift中的NSDate.

203480 次浏览

试试这个:

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 */)

要进一步查询,请分别检查Objective-C和Swift的基金会框架的NSDateFormatter日期格式化程序类。

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

斯威夫特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)

我可以用这个代码来做。

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

https://developer.apple.com/library/prerelease/mac/documentation/cocoa/reference/foundation/classes/nsdateformatter_class/index.html#//apple_ref/doc/uid/20000447-sw32.

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
}

如果您需要经常将字符串解析为日期,则可能需要将该功能移到扩展中。我创建了一个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的日期格式中添加字符串,我这样做了

 var dataFormatter:NSDateFormatter = NSDateFormatter()
dataFormatter.dateFormat = "dd-MMMM 'at' HH:mm a"


cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)
 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
}

SWIFT支持扩展,通过扩展,您可以向现有classstructureenumerationprotocol类型添加新功能。

通过使用extension关键字扩展对象,可以将新的init函数添加到NSDate对象。

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

自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 4,Xcode 9.2
  • Swift 5,Xcode 10.2(10e125)

解决方案

import Foundation


extension DateFormatter {


convenience init (format: String) {
self.init()
dateFormat = format
locale = Locale.current
}
}


extension String {


func toDate (dateFormatter: DateFormatter) -> Date? {
return dateFormatter.date(from: self)
}


func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
return DateFormatter(format: outputFormat).string(from: date)
}
}


extension Date {


func toString (dateFormatter: DateFormatter) -> String? {
return dateFormatter.string(from: self)
}
}

用法

var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()


print("original String with date:               \(dateString)")
print("date String() to Date():                 \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date():                           \(date.toString(dateFormatter: dateFormatter2)!)")

结果

enter image description here

更多信息

关于日期格式

此QA页面上的代码片段为";颠倒";.。

苹果提到的第一件事是你缓存你的格式化程序……

链接到苹果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 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)
}

适用于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


}
}

注意:如果出错,将返回原始字符串

斯威夫特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)

这对我有用..

    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中使用的字符串到日期格式转换选项。

  1. Thursday, Dec 27, 2018格式=EEEE, MMM d, yyyy
  2. 12/27/2018格式=MM/dd/yyyy
  3. 12-27-2018 09:59格式=MM-dd-yyyy HH:mm
  4. Dec 27, 9:59 AM格式=MMM d, h:mm a
  5. December 2018格式=MMMM yyyy
  6. Dec 27, 2018格式=MMM d, yyyy
  7. Thu, 27 Dec 2018 09:59:19 +0000格式=E, d MMM yyyy HH:mm:ss Z
  8. 2018-12-27T09:59:19+0000格式=yyyy-MM-dd'T'HH:mm:ssZ
  9. 27.12.18格式=dd.MM.yy
  10. 09:59:19.815格式=HH:mm:ss.SSS

你可以试试这个Swift代码

    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)

斯威夫特5Xcode 11.0

在“ DateString ”和“ DateFormat ”中传递您想要的(字符串中的日期)。要选择格式,请使用nDateFormatter网站

func getDateFrom(dateString: String, dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = Locale(identifier: "en_US")
guard let date = dateFormatter.date(from: dateString) else {return nil}
return date
}