Swift에서 문자열을 날짜로 변환


답변:


231
  • ISO8601 문자열을 날짜로 변환

    let isoDate = "2016-04-14T10:44:00+0000"
    
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
    let date = dateFormatter.date(from:isoDate)!
    
  • 날짜에서 년, 월, 일 및 시간의 날짜 구성 요소 가져 오기

    let calendar = Calendar.current
    let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)
    
  • 마지막으로 새로운 Date객체를 생성하고 분과 초를 제거하십시오

    let finalDate = calendar.date(from:components)

ISO8601DateFormatteriOS 10 / macOS 12에 도입 된 편의 포맷터도 고려하십시오 .

let isoDate = "2016-04-14T10:44:00+0000"

let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from:isoDate)!

3
"yyyy-MM-dd'T'H ': mm : ssZ"의 Z는 나를 위해 작동하지 않는 문제를 해결했습니다
asheyla

나는 단지 월, 일을 원하지만 이것은 나를 위해 작동하지 않습니다
Sneha

@Sneha 당신이 시간을 원하지 않으면 그냥 생략.hour
vadian

@vadian 내가 했어도 안되요
Sneha

1
하나로 : ISO8601DateFormatter (). date (from : "your string")!
Mike Irving

38

다음 날짜 형식을 시도하십시오.

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter. dateFromString (strDate)

도움이 되길 바랍니다 ..

스위프트 4.1 :

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter.date(from: strDate)

10
그것을 시도하고 그 후에 날짜는 nil을 반환합니다.
asheyla

1
강제 변환에서 'String'유형의 값을 'Date'유형으로 변환 할 수 없음
Oleksandr

22

Swift 4.1에서는 다음을 수행 할 수 있습니다.

func getDate() -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = TimeZone.current
    dateFormatter.locale = Locale.current
    return dateFormatter.date(from: "2015-04-01T11:42:00") // replace Date String
}

16

스위프트 3.0-4.2

import Foundation

extension String {

    func toDate(withFormat format: String = "yyyy-MM-dd HH:mm:ss")-> Date?{

        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
        dateFormatter.locale = Locale(identifier: "fa-IR")
        dateFormatter.calendar = Calendar(identifier: .gregorian)
        dateFormatter.dateFormat = format
        let date = dateFormatter.date(from: self)

        return date

    }
}

extension Date {

    func toString(withFormat format: String = "EEEE ، d MMMM yyyy") -> String {

        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "fa-IR")
        dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
        dateFormatter.calendar = Calendar(identifier: .persian)
        dateFormatter.dateFormat = format
        let str = dateFormatter.string(from: self)

        return str
    }
}

9

안녕 당신은 별도의 T 형식이 있고 원하는대로 변환

// create dateFormatter with UTC time format
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date = dateFormatter.dateFromString("2015-04-01T11:42:00")

// change to a readable time format and change to local time zone
dateFormatter.dateFormat = "EEE, MMM d, yyyy - h:mm a"
dateFormatter.timeZone = NSTimeZone.localTimeZone() 
let timeStamp = dateFormatter.stringFromDate(date!)

6

당신 dateformate과 당신의 날짜를 전달 하면 Year,month,day,hour됩니다. 추가 정보

func GetOnlyDateMonthYearFromFullDate(currentDateFormate:NSString , conVertFormate:NSString , convertDate:NSString ) -> NSString
    {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = currentDateFormate as String
        let formatter = NSDateFormatter()
        formatter.dateFormat = Key_DATE_FORMATE as String
        let finalDate = formatter.dateFromString(convertDate as String)
        formatter.dateFormat = conVertFormate as String
        let dateString = formatter.stringFromDate(finalDate!)

        return dateString
    }


연도 받기

let Year = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "YYYY", convertDate: "2016-04-14T10:44:00+0000") as String


달 가져 오기

let month = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "MM", convertDate: "2016-04-14T10:44:00+0000") as String


하루를

let day = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "dd", convertDate: "2016-04-14T10:44:00+0000") as String


시간 받기

let hour  = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "hh", convertDate: "2016-04-14T10:44:00+0000") as String

4

글로벌 기능을하다

func convertDateFormat(inputDate: String) -> String {

     let olDateFormatter = DateFormatter()
     olDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

     let oldDate = olDateFormatter.date(from: inputDate)

     let convertDateFormatter = DateFormatter()
     convertDateFormatter.dateFormat = "MMM dd yyyy h:mm a"

     return convertDateFormatter.string(from: oldDate!)
}

함수를 호출하고 그 안에 값을 전달

get_OutputStr = convertDateFormat(inputDate: "2019-03-30T05:30:00+0000")

그리고 여기에 출력

Feb 25 2020 4:51 PM



 

1
입력과 출력이 동일하다고 생각하십니까?
디팍 카펜터

2

swift4에서

    var Msg_Date_ = "2019-03-30T05:30:00+0000"

    let dateFormatterGet = DateFormatter()
    dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let dateFormatterPrint = DateFormatter()
    dateFormatterPrint.dateFormat = "MMM dd yyyy h:mm a"  //"MMM d, h:mm a" for  Sep 12, 2:11 PM
    let datee = dateFormatterGet.date(from: Msg_Date_)
    Msg_Date_ =  dateFormatterPrint.string(from: datee ?? Date())

    print(Msg_Date_)

// 출력 :-2019 년 3 월 30 일 05:30 오후


2

1 단계 만> JSON 또는 dataSource에서 문자열 값을 가져옵니다.

2 단계> 지역 변수를 생성하고 할당합니다.

let startDate = CurrentDashBoard.startdate

3 단계> DateFormatter 인스턴스를 만듭니다.

let dateFormatter = DateFormatter()

4 단계> dateFormatter에서 dateFormat을 호출하고 저장된 날짜 dataType을 제공하십시오.

dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss"("may be String formate")

5 단계> 변환 할 로컬 변수를이 변수에 지정하십시오.

let dateFromStringstartDate : NSDate = dateFormatter.date(from: startDate)! as NSDate

6 단계> 다음 코드로 필요한 날짜 형식을 제공하십시오.

dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"

6 단계> 레이블 / 텍스트에 지정

cell.lblStartDate.text = String(format: "%@", strstartDate)

암호:

let startDate = CurrentDashBoard.startdate let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss" let dateFromStringstartDate : 
NSDate = dateFormatter.date(from: startDate)! as NSDate
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
let strstartDate = dateFormatter.string(from: dateFromStringstartDate as Date)

1

스위프트 5. 날짜가 지난 경우 :

let expiryDate = "2020-01-10" // Jan 10 2020

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

if Date() < dateFormatter.date(from: expiryDate) ?? Date() {
    print("Not Yet expiryDate")
} else {
    print("expiryDate has passed")
}

1

나는이 형식에도 열중했다.

아래 솔루션을 참조하십시오.

당신의 등 또는 다른 소스에서 온 문자열 :

    let isoDate = "2020-05-06 20:00:00-03"

날짜 형식을 식별하십시오

    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
    let date = dateFormatter.date(from:isoDate)!

날짜를 Date ()로 지정 했으므로 formatDate.string을 사용하여 원하는 형식으로 변경할 수 있습니다.

    let formatDate = DateFormatter()
    formatDate.dateFormat = "dd/MM/yyyy HH:mm"
    let drawDate = formatDate.string(from: date)
    print(drawDate)

산출:

    06/05/2020 20:00

0

이를 위해 ISO8601 구문 분석 라이브러리를 사용하십시오. 문자열을 인코딩하는 방법이 너무 많습니다. 특정 형식에 의존하지 말고 항상 같은 것을 보내는 서버에 의존하지 마십시오. 문제는 마지막에 'Z'로 시작하며 모든 표준을 통해 확장됩니다. 구문 분석 라이브러리는 모든 경우를 처리하고 항상 안전한 변환을 제공하지만 고정 형식 문자열은 나중에 실패 할 수 있습니다.

이 라이브러리 중 하나를 사용할 수 있습니다. 그들은 또한 CococaPods에서 사용할 수 있습니다 :

https://github.com/boredzo/iso-8601-date-formatter/

https://github.com/malcommac/SwiftDate

구현을 살펴보십시오. 그것들은 모두 수백 줄의 길이입니다.

질문과 관련하여 NSDateComponents를 사용하여 날짜에서 날짜 구성 요소를 가져올 수 있습니다. 웹 사이트의 예는 귀하의 사례를 정확하게 다룹니다.

https://developer.apple.com/documentation/foundation/nscalendar/1414841-components?language=objc

날짜를 변환하면 시간대가 고려됩니다. NSCalendar의 '로케일'을 명시 적으로 설정할 수 있습니다.


0

SwifterSwift를 사용하십시오.

stringDate = "2020-04-26T08:56:17.987Z"
let date = Date(iso8601String: stringDate)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.