Bu dize tarihini "2014-07-15 06: 55: 14.198000 + 00: 00" Swift'te NSDate'e dönüştürmek istiyorum.
Bu dize tarihini "2014-07-15 06: 55: 14.198000 + 00: 00" Swift'te NSDate'e dönüştürmek istiyorum.
Yanıtlar:
bunu dene:
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 */)
Daha fazla sorgu için, Objective-C ve Swift için NSDateFormatter ve DateFormatter Foundation temel sınıflarını kontrol edin .
Swift 3 ve üstü (Swift 4 dahil)
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. Ancak tarih nesnesini dizeden çıkaramıyorum.
hhOlması gereken bir hata yaptım HH. Teşekkürler!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. ZBurada sadece bir karakter olduğunu varsaydım . Unutmayın, Zözel bir anlamı da var. Biçim Zolarak belirtmek isterseniz basic hmsolur yyyy-MM-dd'T'HH:mm:ss.SSSZ.
Hızlı 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)
Hızlı 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)
Bu kodla yapabilirim.
ddyerine kullanmak DD"her zaman Ocak" sorununun düzeltilmesine yardımcı olacaktır.
yyyy-MM-dd, aksi takdirde, ayrıştırılan tarih Ocak ayında sıkıştı - Değişikliği yansıtmak için cevabı güncelledim.
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
}
Swift 3 için güncellendi.
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)!)")
Dizeyi sık sık bir tarihte ayrıştırmanız gerekirse, işlevselliği bir uzantıya taşımak isteyebilirsiniz. Bir sharedCode.swift dosyası oluşturdum ve uzantılarımı buraya koydum:
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
}
}
Eğer dizenizi bir NSDate'e dönüştürmek istiyorsanız, şöyle bir şey yazabilirsiniz:
var myDate = myDateString.toDateTime()
hholması gerektiğine eminim HH.
Swift 3 için
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'ın bahsettiği ilk şey, biçimlendiricinizi önbelleğe almanızdır ...
Bunun nasıl yapılacağını belirten Apple doco'ya bağlantı:
Verimlilik için Önbellek Biçimlendiriciler Tarih biçimlendirici oluşturmak ucuz bir işlem değildir. ... tek bir örneği önbelleğe al ...
Global kullanın ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
O zaman bu formatlayıcıyı her yerde kullanın ...
let s = df.string(from: someDate)
veya
let d = df.date(from: someString)
Ya da DateFormatter'da diğer birçok çok sayıda uygun yöntemden birini kullanın.
(String'e bir uzantı yazarsanız, kodunuz tamamen "baş aşağı" dır - dateFormatter çağrılarını kullanamazsınız!)
Genellikle "globalForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. vb.
Swift destek uzantıları, uzantısı ile varolan yeni işlevler ekleyebilirsiniz class, structure, enumeration, veya protocoltipi.
Anahtar kelimeyi kullanarak nesneyi genişleterek nesneye yeni bir initişlev ekleyebilirsiniz .NSDateextension
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)
}
}
Artık aşağıdakileri kullanarak bir NSDate nesnesini başlatabilirsiniz:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
df.date(from: beginDateString), bir nil olsun! neden? ( df = DateFormatter())
Swift 3'ten beri, NS öneklerinin çoğu bırakıldı.
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), bir nil olsun! neden? ( df = DateFormatter())
Hızlı 3,4:
2 yararlı dönüşüm:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Kullanım: 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)
SWIFT 3.1 İÇİN
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
}
}
NOT: BU HATA EĞER ORİJİNAL STRING İADE EDECEK
Bu iş benim için ..
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!)
}
Aşağıda hızlı iOS'da kullanılabilen bazı dize-tarih formatı dönüştürme seçenekleri bulunmaktadır.
Thursday, Dec 27, 2018 format = EEEE, MMM d, yyyy12/27/2018 format = MM/dd/yyyy12-27-2018 09:59 format = MM-dd-yyyy HH:mmDec 27, 9:59 AM format = MMM d, h:mm aDecember 2018 format = MMMM yyyyDec 27, 2018 format = MMM d, yyyyThu, 27 Dec 2018 09:59:19 +0000 format = E, d MMM yyyy HH:mm:ss Z2018-12-27T09:59:19+0000 format = yyyy-MM-dd'T'HH:mm:ssZ27.12.18 format = dd.MM.yy09:59:19.815 format = HH:mm:ss.SSSSwift: 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
}
Bu hızlı kodu deneyebilirsiniz
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)
SWIFT 5 , Xcode 11.0
(Dizedeki tarih) öğenizi "dateString" ve "dateFormat" geçiş biçiminde geçirin. Biçimi seçmek için NDateFormatter web sitesini kullanın .
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