Swift에서 문자열을 최신 상태로 변환
이 문자열을 변환하려면 어떻게 해야 합니까?"2016-04-14T10:44:00+0000"
으로NSDate
1년, 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)
편의 포메터도 고려해야 합니다.ISO8601DateFormatter
iOS 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
'source' 카테고리의 다른 글
읽기 전용 ObservableCollection 속성을 만들려면 어떻게 해야 합니까? (0) | 2023.04.19 |
---|---|
디렉토리에서 마지막으로 수정된 5개의 파일을 나열하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
C#/WPF: ViewModel의 모든 속성에 대해 Property Changed? (0) | 2023.04.14 |
새 행의 선택 가능 영역을 작게 만들지 않고 WPF DataGrid 셀을 오른쪽으로 정렬하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
콘텐츠가 화면에 맞았을 때 UITableView 테이블 스크롤을 비활성화하는 방법 (0) | 2023.04.14 |