Swift'de dizeyi tarihe dönüştürme


136

Bu dizgeyi nasıl bir dizgeye "2016-04-14T10:44:00+0000"dönüştürebilir NSDateve yalnızca yıl, ay, gün, saati nasıl koruyabilirim?

TBunun ortasında gerçekten tarihleri ile çalışırken alışkınım atıyor.


Sadece Yıl, ay, gün, saat mi istiyorsun?
Mitul Marsoniya

Yanıtlar:


231
  • 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 Datenesne 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)!

3
Z ": mm yyyy-AA-gg'T'SS ssZ" Benim için çalışmıyor ne çözüldü
asheyla

Ben sadece yıl ve gün istiyorum, ama bu benim için çalışmıyor
Sneha 21

@Sneha Saati istemiyorsan .hour
atla

@vadian yaptım ama alamıyorum
Sneha 21

1
Hepsi bir arada: ISO8601DateFormatter (). Tarih (kimden: "dizeniz")!
Mike Irving

38

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)

10
Denedim ve bundan sonra tarih sıfır dönüyor.
asheyla

1
'String' türünün değeri, zorlamada 'Tarih' türüne dönüştürülemiyor
Oleksandr

22

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
}

16

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

9

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!)

6

Sadece dateformategeç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

4

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



 

1
Giriş ve çıktınızın aynı olduğunu mu düşünüyorsunuz?
Deepak Carpenter

2

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


2

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)

1

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")
}

1

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

0

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.


0

Sadece SwifterSwift'i kullanın.

stringDate = "2020-04-26T08:56:17.987Z"
let date = Date(iso8601String: stringDate)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.