이 문자열 날짜 "2014-07-15 06 : 55 : 14.198000 + 00 : 00"을 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/datetime
*/
let date = dateFormatter.dateFromString(/* your_date_string */)
추가 쿼리 는 Objective-C 및 Swift에 대한 Foundation 프레임 워크 의 NSDateFormatter 및 DateFormatter 클래스를 각각 확인하십시오.
스위프트 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
yyyy-MM-dd hh:mm:ssZZZ
. 그러나 문자열에서 날짜 객체를 가져올 수 없습니다.
hh
해야했다 HH
. 감사!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. 나는 Z
여기에 캐릭터 일 뿐이라고 생각 했다. Z
특별한 의미가 있음을 기억하십시오 . 형식 Z
을로 지정 하려는 경우 입니다. basic hms
yyyy-MM-dd'T'HH:mm:ss.SSSZ
스위프트 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)
이 코드로 할 수 있습니다.
dd
대신 것은 DD
은 "항상 1월"문제를 해결하는 데 도움이됩니다.
yyyy-MM-dd
그렇지 않으면 구문 분석 된 날짜가 1 월에 멈춤-변경 사항을 반영하여 답변을 업데이트했습니다.
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
}
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()
hh
있어야한다고 확신합니다 HH
.
스위프트 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"등과 같은 몇 가지 전역이 있습니다.
신속한 지원 확장, 확장과 기존에 새로운 기능을 추가 할 수 있습니다 class
, structure
, enumeration
, 또는 protocol
유형입니다.
키워드를 사용하여 객체를 확장하여 객체에 새 init
함수를 추가 할 수 있습니다 .NSDate
extension
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")
df.date(from: beginDateString)
. 왜? ( df = DateFormatter()
)
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)
df.date(from: beginDateString)
. 왜? ( df = DateFormatter()
)
스위프트 3,4 :
2 가지 유용한 전환 :
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
사용법 : 1.
let date = Date() //gives today's date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"
let todaysDateInUKFormat = dateFormatter.string(from: date)
2.
let someDateInString = "23.06.2017"
var getDateFromString = dateFormatter.date(from: someDateInString)
스위프트 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
}
}
참고 :이 오류가 발생하면 원래 문자열을 반환합니다.
이것은 나를 위해 일한다 ..
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!)
}
다음은 신속한 iOS에서 사용할 수있는 문자열을 날짜 형식으로 변환하는 옵션입니다.
Thursday, Dec 27, 2018
형식 = EEEE, MMM d, yyyy
12/27/2018
형식 = MM/dd/yyyy
12-27-2018 09:59
형식 = MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
형식 = MMM d, h:mm a
December 2018
형식 = MMMM yyyy
Dec 27, 2018
형식 = MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
형식 = E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
형식 = yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
형식 = dd.MM.yy
09:59:19.815
형식 = HH:mm:ss.SSS
Swift: iOS
if we have string, convert it to NSDate,
var dataString = profileValue["dob"] as String
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"
// convert string into date
let dateValue:NSDate? = dateFormatter.dateFromString(dataString)
if you have and date picker parse date like this
// to avoid any nil value
if let isDate = dateValue {
self.datePicker.date = isDate
}
이 빠른 코드를 시도해 볼 수 있습니다
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)
스위프트 5 , Xcode 11.0
"날짜 문자열"과 "날짜 형식"패스 형식으로 (날짜 문자열)을 전달하십시오. 형식을 선택하려면 NDateFormatter 웹 사이트를 사용 하십시오 .
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
}
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