Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将字符串日期转换为NSDate?_Ios_String_Swift_Nsdate - Fatal编程技术网

Ios 如何将字符串日期转换为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

我想将“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/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)
解决方案 用法 结果

更多信息

此QA页面上的代码片段是“颠倒的”。。。 苹果提到的第一件事是缓存格式化程序…

缓存格式化程序以提高效率 创建日期格式化程序不是一个便宜的操作。。。缓存单个实例

使用全局

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 5Xcode 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
    }