[ios] 문자열 날짜를 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/datetime
                            */
let date = dateFormatter.dateFromString(/* your_date_string */)

추가 쿼리 는 Objective-C 및 Swift에 대한 Foundation 프레임 워크 의 NSDateFormatterDateFormatter 클래스를 각각 확인하십시오.

스위프트 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)

이 코드로 할 수 있습니다.


답변

 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
}

스위프트 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
}


답변

세부

  • 스위프트 4, Xcode 9.2
  • 스위프트 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)!)")

결과

여기에 이미지 설명을 입력하십시오

추가 정보

날짜 형식에 대하여


답변

문자열을 날짜로 자주 구문 분석해야 할 경우 기능을 확장으로 옮길 수 있습니다. 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()


답변

스위프트 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 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”등과 같은 몇 가지 전역이 있습니다.