Yanıtlar:
ISO8601 dizesini tarihe dönüştürün
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)!
Tarihten itibaren yıl, ay, gün ve saat için tarih bileşenlerini alın
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)
Sonunda yeni bir Date
nesne oluşturun ve dakikaları ve saniyeleri soyun
let finalDate = calendar.date(from:components)
ISO8601DateFormatter
İOS 10 / macOS 12'de sunulan kullanışlı biçimlendiriciyi de düşünün :
let isoDate = "2016-04-14T10:44:00+0000"
let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from:isoDate)!
.hour
Aşağıdaki tarih formatını deneyin.
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter. dateFromString (strDate)
Umarım yardımcı olur..
Swift 4.1:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter.date(from: strDate)
Swift 4.1'de şunları yapabilirsiniz:
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
}
}
Merhaba Ayrı bir T Formatınız var ve sonra istediğiniz gibi dönüştürün
// 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!)
Sadece dateformate
geçersen ve randevun o zaman alırsın Year,month,day,hour
. Fazladan bilgi
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
}
Yıl Al
let Year = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "YYYY", convertDate: "2016-04-14T10:44:00+0000") as String
Ay Al
let month = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "MM", convertDate: "2016-04-14T10:44:00+0000") as String
Gün alın
let day = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "dd", convertDate: "2016-04-14T10:44:00+0000") as String
Saati Al
let hour = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "hh", convertDate: "2016-04-14T10:44:00+0000") as String
genel işlev yapmak
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!)
}
Çağrılan işlev ve içinde değer geçirme
get_OutputStr = convertDateFormat(inputDate: "2019-03-30T05:30:00+0000")
ve işte çıktı
Feb 25 2020 4:51 PM
Swift4'te,
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_)
// çıktı: - 30 Mart 2019 17:30
sadece Adım 1> JSON veya dataSource'tan String değerini alın
Adım 2> yerel bir değişken oluşturun ve onu atayın.
let startDate = CurrentDashBoard.startdate
Adım 3> DateFormatter örneğini oluşturun.
let dateFormatter = DateFormatter()
adım 4> dateFormatter'dan dateFormat'ı çağırın ve kaydedilmiş tarih dataType'ı sağlayın.
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss"("may be String formate")
Adım 5> Yerel değişkeni dönüştürmek için bu değişkene atayın.
let dateFromStringstartDate : NSDate = dateFormatter.date(from: startDate)! as NSDate
Adım 6> aşağıdaki kodu kullanarak gerekli tarih formatınızı girin.
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
Adım 6> Etikete / metne atayın
cell.lblStartDate.text = String(format: "%@", strstartDate)
Kod:
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)
Swift 5. BİR TARİHİN GEÇTİĞİNİ görmek için:
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")
}
Ben de bu formatla çıldırıyordum.
Aşağıdaki çözüme bakın.
Sırtınızdan veya başka bir kaynaktan gelen teliniz:
let isoDate = "2020-05-06 20:00:00-03"
Tarih formatını tanımlayın
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
let date = dateFormatter.date(from:isoDate)!
Artık Date () olarak tarihe sahip olduğunuza göre, formatDate.string'i kullanarak istediğiniz formata değiştirebilirsiniz.
let formatDate = DateFormatter()
formatDate.dateFormat = "dd/MM/yyyy HH:mm"
let drawDate = formatDate.string(from: date)
print(drawDate)
Çıktı:
06/05/2020 20:00
Bunu yapmak için lütfen bir ISO8601 ayrıştırma kitaplığı kullanın. Dizenin kodlanmasının pek çok yolu vardır. Belirli bir formata güvenmeyin ve her zaman aynı şeyi gönderen sunucuya güvenmeyin. Sorunlar sonunda 'Z' ile başlar ve standardın tüm çeşitlerine yayılır. Bir ayrıştırma kitaplığı tüm durumları ele alır ve her zaman güvenli bir dönüştürme sağlar - oysa sabit bir biçimlendirme dizesi gelecekte büyük olasılıkla başarısız olur.
Bu kitaplıklardan birini kullanabilirsiniz. CococaPods'ta da mevcuttur:
https://github.com/boredzo/iso-8601-date-formatter/
https://github.com/malcommac/SwiftDate
Uygulamalara bir göz atın. Her ikisi de birkaç yüz satır uzunluğundadır - iyi bir nedenden ötürü.
Soru ile ilgili olarak: NSDateComponents'ı kullanarak tarih bileşenlerini tarihten çıkarabilirsiniz. Web sitesindeki örnek tam olarak davanızı kapsar.
https://developer.apple.com/documentation/foundation/nscalendar/1414841-components?language=objc
Lütfen tarihinizi dönüştürmenin saat dilimini dikkate alacağını unutmayın. NSCalendar'ın 'yerel ayarını' açıkça ayarlamak isteyebilirsiniz.