2015-06-11 6 views
17

के महीने मैं इस प्रारूपआईओएस स्विफ्ट परिवर्तित कैलेंडर घटक पूर्णांक मध्यम शैली स्ट्रिंग महीने

visible calendar style date

उपयोगकर्ता के लिए कैलेंडर प्रदर्शित करना चाहते। व्यक्तिगत विकल्प घटकों को प्राप्त करने के लिए "स्ट्रिंग रेंज" का उपयोग करना एक विकल्प है। दूसरा यह है कि इसे एनएससीएंडेंडर का उपयोग करना है जो मुझे बेहतर दिखता है (है ना?)। तो मेरा कोड नीचे जैसा है। लेकिन दो समस्याएं हैं।

  1. मैं स्थानीय समय फार्म "घंटे & मिनट घटक"
  2. आई इंट में महीने हो रही है नहीं मिल रहा है। मैं चाहता हूं कि यह स्ट्रिंग में हो (मध्यम स्टाइल में महीना)

कोई भी जानता है कि मुझे क्या चाहिए? संलग्न छवि वह है जो मैं वास्तव में प्राप्त करना चाहता हूं। वहां मैं "तारीख" के लिए तीन UILabel एक का उपयोग कर रहा हूं, दूसरा "महीने, वर्ष" और तीसरा "समय" के लिए।

किसी भी मदद की सराहना की जाएगी।

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

उत्तर

20

आप इस प्रकार DateFormatter उपयोग कर सकते हैं:

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" 
+0

मैं बहुत कोशिश की, लेकिन मैं बात मैं जरूरत प्राप्त करने में सक्षम नहीं हूँ। टाइमज़ोन समस्या पैदा कर रहा है। लेकिन अभी के लिए मैं अपने कोड में चयनित दिनांक प्रदर्शित करने के लिए दिनांक और समय स्ट्रिंग के साथ काम कर रहा हूं। इसलिए मैंने उन मुद्दों से संबंधित एक नया प्रश्न पोस्ट किया है जिन पर मैं सामना कर रहा हूं http://stackoverflow.com/questions/30804366/ios-swift-unable-to-update-uilabel-on-first-uidatepicker- चयन। धन्यवाद। –

15

NSDateFormatter है monthSymbols, shortMonthSymbols और veryShortSymbols गुण।

तो यह प्रयास करें:

let dateFormatter: NSDateFormatter = NSDateFormatter() 

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

println(monthSymbol) 
+1

संपादित किया गया। धन्यवाद! –

+0

यदि समय 11: 59 पीएम है, तो आउटपुट की तारीख inputDateString के समान नहीं है। क्या आप उपर्युक्त प्रश्न की समीक्षा कर सकते हैं? –

+0

समस्या आपके इनपुट स्ट्रिंग रूपांतरण पर एनएसडीएटी –

2
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 
+0

बिल्कुल सही। धन्यवाद –

संबंधित मुद्दे