source

Swift에서 문자열을 최신 상태로 변환

factcode 2023. 4. 19. 23:30
반응형

Swift에서 문자열을 최신 상태로 변환

이 문자열을 변환하려면 어떻게 해야 합니까?"2016-04-14T10:44:00+0000"으로NSDate1년, 1개월, 1일, 1시간만 지킬 수 있을까요?

T데이트할 때 익숙했던 걸 중간에 날려버리는 것 같아요.

  • 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 10.12에서 도입:

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

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

다음 날짜 형식을 사용해 보십시오.

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

Swift 4.1의 경우:

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

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
}

Swift 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
    }
}

글로벌하게 기능시키다

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



 

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

문자열 확장 Swift - 5.0을 사용하여 문자열을 빠른 날짜로 변환

    extension String {
         public enum DateFormatType {
        
        /// The ISO8601 formatted year "yyyy" i.e. 1997
        case isoYear
        
        /// The ISO8601 formatted year and month "yyyy-MM" i.e. 1997-07
        case isoYearMonth
        
        /// The ISO8601 formatted date "yyyy-MM-dd" i.e. 1997-07-16
        case isoDate
        
        /// The ISO8601 formatted date and time "yyyy-MM-dd'T'HH:mmZ" i.e. 1997-07-16T19:20+01:00
        case isoDateTime
        
        /// The ISO8601 formatted date, time and sec "yyyy-MM-dd'T'HH:mm:ssZ" i.e. 1997-07-16T19:20:30+01:00
        case isoDateTimeSec
        
        /// The ISO8601 formatted date, time and millisec "yyyy-MM-dd'T'HH:mm:ss.SSSZ" i.e. 1997-07-16T19:20:30.45+01:00
        case isoDateTimeMilliSec
        
        /// The dotNet formatted date "/Date(%d%d)/" i.e. "/Date(1268123281843)/"
        case dotNet
        
        /// The RSS formatted date "EEE, d MMM yyyy HH:mm:ss ZZZ" i.e. "Fri, 09 Sep 2011 15:26:08 +0200"
        case rss
        
        /// The Alternative RSS formatted date "d MMM yyyy HH:mm:ss ZZZ" i.e. "09 Sep 2011 15:26:08 +0200"
        case altRSS
        
        /// The http header formatted date "EEE, dd MM yyyy HH:mm:ss ZZZ" i.e. "Tue, 15 Nov 1994 12:45:26 GMT"
        case httpHeader
        
        /// A generic standard format date i.e. "EEE MMM dd HH:mm:ss Z yyyy"
        case standard
        
        /// A custom date format string
        case custom(String)
        
        /// The local formatted date and time "yyyy-MM-dd HH:mm:ss" i.e. 1997-07-16 19:20:00
        case localDateTimeSec
        
        /// The local formatted date  "yyyy-MM-dd" i.e. 1997-07-16
        case localDate
        
        /// The local formatted  time "hh:mm a" i.e. 07:20 am
        case localTimeWithNoon
        
        /// The local formatted date and time "yyyyMMddHHmmss" i.e. 19970716192000
        case localPhotoSave
        
        case birthDateFormatOne
        
        case birthDateFormatTwo
        
        ///
        case messageRTetriveFormat
        
        ///
        case emailTimePreview
        
        var stringFormat:String {
          switch self {
          //handle iso Time
          case .birthDateFormatOne: return "dd/MM/YYYY"
          case .birthDateFormatTwo: return "dd-MM-YYYY"
          case .isoYear: return "yyyy"
          case .isoYearMonth: return "yyyy-MM"
          case .isoDate: return "yyyy-MM-dd"
          case .isoDateTime: return "yyyy-MM-dd'T'HH:mmZ"
          case .isoDateTimeSec: return "yyyy-MM-dd'T'HH:mm:ssZ"
          case .isoDateTimeMilliSec: return "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
          case .dotNet: return "/Date(%d%f)/"
          case .rss: return "EEE, d MMM yyyy HH:mm:ss ZZZ"
          case .altRSS: return "d MMM yyyy HH:mm:ss ZZZ"
          case .httpHeader: return "EEE, dd MM yyyy HH:mm:ss ZZZ"
          case .standard: return "EEE MMM dd HH:mm:ss Z yyyy"
          case .custom(let customFormat): return customFormat
            
          //handle local Time
          case .localDateTimeSec: return "yyyy-MM-dd HH:mm:ss"
          case .localTimeWithNoon: return "hh:mm a"
          case .localDate: return "yyyy-MM-dd"
          case .localPhotoSave: return "yyyyMMddHHmmss"
          case .messageRTetriveFormat: return "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
          case .emailTimePreview: return "dd MMM yyyy, h:mm a"
          }
        }  
 }
        
 func toDate(_ format: DateFormatType = .isoDate) -> Date?{
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format.stringFormat
        let date = dateFormatter.date(from: self)
        return date 
  }
 }

우리는 같은 것을 사용한다.

    string.toDate(.isoDate)
    "1997-05-24".toDate(.isoDate)

안녕하세요 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!)

iOS 15.0 이후 String을 최신 상태로 보다 빠르게 변환할 수 있습니다.

let strategy = Date.ParseStrategy(format: "\(year: .defaultDigits)-\(month: .twoDigits)-\(day: .twoDigits)T\(hour: .twoDigits(clock: .twentyFourHour, hourCycle: .zeroBased)):\(minute: .twoDigits):\(second: .twoDigits)\(timeZone: .iso8601(.short))", timeZone: .current)
let date = try? Date("2016-04-14T10:44:00+0000", strategy: strategy)

그냥 지나가면 돼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

저도 이 포맷에 미쳐가고 있었어요.

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

당신의 등이나 다른 소스에서 나온 문자열:

    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()로 지정되었으므로 date.string 형식을 사용하여 원하는 형식으로 변경할 수 있습니다.

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

출력:

    06/05/2020 20:00

스텝 1 > JSON 또는 dataSource에서 String 값을 가져옵니다.

스텝 2 > 로컬 변수를 생성하여 할당합니다.

let startDate = CurrentDashBoard.startdate

스텝 3 > Date Formatter 인스턴스를 만듭니다.

let dateFormatter = DateFormatter()

스텝 4 > dateFormatter에서 dateFormat을 호출하여 저장된 date 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)

경우에 따라 문자열을 Date로 스위프트로 변환하면 0이 반환될 수 있으므로 format.date 함수에 "!" 마크를 추가해야 합니다.

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

let stringDate = "11-03-2018"
let date = dateFormatterUK.date(from: stringDate)!

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일 오후 5시 30분

스위프트 5.6

String extension에 의해 Date in structure를 사용하여 문자열을 가져와 문자열로 변환하는 간단한 방법을 다음에 나타냅니다.

날짜 문자열 예: "2022-03-15T07:13:49.607+00:00"

날짜가 "yyy-MM-dd'T" 형식이 아닌 경우HH:mm:ss.SSSSSZ"는 01-01-70을 반환합니다.

import Foundation

extension String {

  func convertToDate() -> String {
   
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"
      if let dt = dateFormatter.date(from: self) {
          dateFormatter.dateFormat = "MM-dd-yy"
          let formatedStringDate = dateFormatter.string(from: dt)
              return formatedStringDate
      }
    
   
      return "01-01-70"
  }
}

SwifterSwift를 사용하면 됩니다.

stringDate = "2020-04-26T08:56:17.987Z"
let date = Date(iso8601String: stringDate)

SwiftDate는 어때?Swift를 위한 최적의 날짜 및 시간 구문 분석 및 조작 라이브러리.

https://github.com/malcommac/SwiftDate#1-date-parsing

코코아 팟을 사용하여 설치합니다.https://github.com/malcommac/SwiftDate/blob/master/Documentation/0.Informations.md#installation

그 후:

import SwiftDate

// All default datetime formats (15+) are recognized automatically
let _ = "2010-05-20 15:30:00".toDate()
// You can also provide your own format!
let _ = "2010-05-20 15:30".toDate("yyyy-MM-dd HH:mm")
// All ISO8601 variants are supported too with timezone parsing!
let _ = "2017-09-17T11:59:29+02:00".toISODate()
// RSS, Extended, HTTP, SQL, .NET and all the major variants are supported!
let _ = "19 Nov 2015 22:20:40 +0100".toRSS(alt: true)

이를 위해 ISO8601 구문 분석 라이브러리를 사용하십시오.문자열을 인코딩하는 방법은 너무 많습니다.특정 형식에 의존하지 말고 서버가 항상 같은 방식으로 전송하도록 하지 마십시오.문제는 끝에 있는 'Z'에서 시작되며 모든 종류의 표준으로 확대될 것입니다.구문 분석 라이브러리는 모든 경우를 처리하고 항상 안전한 변환을 제공합니다. 단, 고정 포맷 문자열은 나중에 실패할 수 있습니다.

이 라이브러리 중 하나를 사용할 수 있습니다.CocaPod에서도 사용할 수 있습니다.

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의 '로케일'을 명시적으로 설정할 수 있습니다.

언급URL : https://stackoverflow.com/questions/36861732/convert-string-to-date-in-swift

반응형