Ios 如何将字符串日期转换为NSDate?
我想将“2014-07-15 06:55:14.198000+00:00”此字符串日期转换为Swift格式的NSDate。尝试以下操作:Ios 如何将字符串日期转换为NSDate?,ios,string,swift,nsdate,Ios,String,Swift,Nsdate,我想将“2014-07-15 06:55:14.198000+00:00”此字符串日期转换为Swift格式的NSDate。尝试以下操作: let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = /* find out and place date format from * http://userguide.icu-project.org/formatparse/d
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 */)
用于Objest-C和SWIFT的基础框架的进一步查询、检查和分类。
Swift 3及更高版本(包括Swift 4)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)
Swift 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)
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)
}
我可以用这个代码来做
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
如果您需要经常将字符串解析为日期,您可能需要将功能移动到扩展中。我创建了一个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)
更新为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支持扩展,通过扩展,您可以向现有的
类
、结构
、枚举
、或协议
类型添加新功能
通过使用extension
关键字扩展对象,可以向NSDate
对象添加新的init
函数
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)
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
然后只要在任何地方使用格式化程序
let s = df.string(from: someDate)
或
或者在DateFormatter上使用其他许多方便的方法
就这么简单。
(如果您在字符串上编写扩展名,您的代码将完全“颠倒”——您不能使用任何dateFormatter调用!)
请注意,通常您会有一些这样的全局变量。。例如“formatForClient”“formatForPubNub”“FormatForDisplayInVoiceScreen”。。Swift 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)
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
}
}
注意:如果出现错误,这将返回原始字符串
2个有用的转换:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
用法:
一,
二,
这是我的工作
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中使用的字符串到日期格式转换选项
2018年12月27日星期四
format=EEEE,MMM d,yyyy
2018年12月27日
format=MM/dd/yyyy
12-27-2018 09:59
format=MM dd yyyy HH:MM
12月27日上午9:59
format=mmmd,h:mma
2018年12月
format=MMMM yyyy
2018年12月27日
format=MMM d,yyyy
2018年12月27日星期四09:59:19+0000
format=E,d MMM yyy HH:mm:ss Z
2018-12-27T09:59:19+0000
format=yyyy-MM-dd'HH:MM:ssZ
27.12.18
format=dd.MM.yy
09:59:19.815
format=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)
SWIFT 5,Xcode 11.0 以“dateString”和所需的“dateFormat”传递格式传递(字符串中的日期)。要选择格式,请使用
看起来您的字符串“2014-07-15 06:55:14.198000+00:00”不可访问。如果您使用NSDateFormatter帮助我将LOT作为下面所有答案的辅助资源,我强烈建议您检查此处的旧答案是否确实错误。Apple doco说,非常清楚,您需要缓存格式化程序。如果您需要此格式的任何帮助程序,找到解决方案只需设置“yyyy-MM-dd hh:MM:ss.SSSSxxx”此日期格式我有一个类似于“2014-07-15 06:55:14-0400”的日期字符串,我尝试使用
yyy-MM-dd hh:MM:ssZZZ
。但是我无法从字符串中提取日期对象。@Prem,如果您看到输出是“2014-07-15 10:55:14+0000”
,则正确。从NSDate
description开始,日期的输出将用差值计算(这里是GMT-4小时)。如果您想获得GMT和UTC之间的差值,即-0400
检查@x4h1d,嘿,我找到了!我在hh
中犯了一个错误,应该是hh
。谢谢!@我想那应该是yyyy-MM-dd'HH:MM:ss.SSS'Z'
。我假设Z
在这里只是一个字符。记住,Z
也有特殊的含义。如果希望Z
指定为basic hms
,则格式应为yyyy-MM-dd'HH:MM:ss.SSSZ
。代码不正确。它使用dd
而不是dd
输出一些“2014年1月15日12:00 AM”,这将有助于解决“始终是1月”的问题。正确的版本是,yyyy-MM-dd
,否则,解析的日期将被固定在1月-我更新了答案以反映更改。如果我想将当前日期作为字符串传递,该怎么办。这行得通吗?@Zorayr,Kittisak:我得到了输出,可选(2014-07-14 18:30:00+0000),也就是说,一天减少了。我怎么能修好它?这怎么行?日期格式化程序未初始化,也没有理由拆分日期的声明和初始化。谢谢。也可以编写:var myDate=“04-05-2015”。toDateTime()虽然不太有用,但在设置测试数据时我发现这很方便。我非常确定在这种情况下,hh
应该是hh
。这并没有给出我指定的格式:var date=NSDate();让dateFormatter=NSDateFormatter();dateFormatter.dateFormat=“MMMM d,YYYY”;让myDate=dateFormatter.stringFromDate(日期);除此之外,如果我像这样使用您的扩展->
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
}
}
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
let date = Date() //gives today's date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"
let todaysDateInUKFormat = dateFormatter.string(from: date)
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!)
}
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)
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
}