web-dev-qa-db-fra.com

iOS Swift conversion du composant de calendrier int mois en mois de chaîne de style moyen

Je souhaite afficher le calendrier dans ce format

visible calendar style date

à l'utilisateur. Une option consiste à utiliser "plage de chaînes" pour obtenir les composants de calendrier individuels. Le deuxième est de l'obtenir en utilisant NSCalendar qui pour moi ressemble au meilleur (est-ce?). Donc mon code est comme ci-dessous. Mais il y a deux problèmes.

  1. Je ne reçois pas le formulaire d'heure locale "composants heure et minute"
  2. Je reçois un mois en Int. Je veux qu'il soit en String (mois en style moyen)

Quelqu'un sait comment obtenir ce dont j'ai besoin? L'image ci-jointe est exactement ce que je veux réaliser. Là, j'utilise trois UILabel un pour "date", deuxième pour "mois, année" et troisième pour "heure".

Toute aide serait appréciée.

var inputDateString = "Jun/12/2015 02:05 Am +05:00"

override func viewDidLoad() {
    super.viewDidLoad()
    let newDate = dateformatterDateString(inputDateString)
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: newDate!)

    let hour = components.hour
    let minutes = components.minute
    let month = components.month
    let year = components.year
    let day = components.day

    println(newDate)
    println(components)
    println(day)     // 12
    println(month)   // 6 -----> Want to have "Jun" here
    println(year)    // 2015
    println(hour)    // 2 ------> Want to have the hour in the inputString i.e. 02
    println(minutes) // 35 ------> Want to have the minute in the inputString i.e.  05
}

func dateformatterDateString(dateString: String) -> NSDate? {
    let dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM/dd/yyyy hh:mm a Z"
    //      dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
    dateFormatter.timeZone = NSTimeZone.localTimeZone()
    return dateFormatter.dateFromString(dateString)
}
21
NS1518

Vous pouvez utiliser DateFormatter comme suit:

extension Formatter {
    static let monthMedium: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "LLL"
        return formatter
    }()
    static let hour12: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "h"
        return formatter
    }()
    static let minute0x: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "mm"
        return formatter
    }()
    static let amPM: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "a"
        return formatter
    }()
}
extension Date {
    var monthMedium: String  { return Formatter.monthMedium.string(from: self) }
    var hour12:  String      { return Formatter.hour12.string(from: self) }
    var minute0x: String     { return Formatter.minute0x.string(from: self) }
    var amPM: String         { return Formatter.amPM.string(from: self) }
}

let date = Date()

let dateMonth  = date.monthMedium  // "May"
let dateHour   = date.hour12       // "1"
let dateMinute = date.minute0x     // "18"
let dateAmPm = date.amPM           // "PM"
23
Leo Dabus

NSDateFormatter possède les propriétés monthSymbols, shortMonthSymbols et veryShortSymbols.

Essayez donc ceci:

let dateFormatter: NSDateFormatter = NSDateFormatter()

let months = dateFormatter.shortMonthSymbols
let monthSymbol = months[month-1] as! String // month - from your date components

println(monthSymbol)
17
Fernando Reynoso
I am adding three types. Have a look.

        //Todays Date
        let todayDate = NSDate()
        let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
        let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: todayDate)
        var (year, month, date) = (components.year, components.month, components.day)
        println("YEAR: \(year)  MONTH: \(month) DATE: \(date)")

        //Making a X mas Yr
        let morningOfChristmasComponents = NSDateComponents()
        morningOfChristmasComponents.year = 2014
        morningOfChristmasComponents.month = 12
        morningOfChristmasComponents.day = 25
        morningOfChristmasComponents.hour = 7
        morningOfChristmasComponents.minute = 0
        morningOfChristmasComponents.second = 0

        let morningOfChristmas = NSCalendar.currentCalendar().dateFromComponents(morningOfChristmasComponents)!
        let formatter = NSDateFormatter()
        formatter.dateStyle = NSDateFormatterStyle.LongStyle
        formatter.timeStyle = .MediumStyle
        let dateString = formatter.stringFromDate(morningOfChristmas)
        print("dateString : \(dateString)")


        //Current month - complete name
        let dateFormatter: NSDateFormatter = NSDateFormatter()
        let months = dateFormatter.monthSymbols
        let monthSymbol = months[month-1] as! String
        println("monthSymbol  : \(monthSymbol)")


Print Results:

YEAR: 2015  MONTH: 10 DATE: 9
dateString : December 25, 2014 at 7:00:00 AM
monthSymbol  : October
2
A.G

Solution Swift 4.x:

//if currentMonth = 1
DateFormatter().monthSymbols[currentMonth - 1]

Répondre:

Janvier

0
cspam