iOS Swift转换日历组件int月中风格string月

我想以这种格式显示日历

可见的日历样式日期

给用户。 一种select是使用“string范围”来获取各个日历组件。 第二个是使用NSCalendar,这对我来说看起来更好(是吗?)。 所以我的代码如下。 但是有两个问题。

  1. 我没有得到当地时间表“小时和分钟的组成部分”
  2. 我在诠释月。 我希望它在string(月中mediumStyle)

任何人都知道如何得到我需要的东西? 附上的图片是我想要达到的。 在那里,我使用了三个UILabel,一个用于“date”,第二个用于“月,年”,第三个用于“时间”。

任何帮助,将不胜感激。

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 ie 02 println(minutes) // 35 ------> Want to have the minute in the inputString ie 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) } 

您可以使用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" 

NSDateFormattermonthSymbolsshortMonthSymbolsveryShortSymbols属性。

所以试试这个:

 let dateFormatter: NSDateFormatter = NSDateFormatter() let months = dateFormatter.shortMonthSymbols let monthSymbol = months[month-1] as! String // month - from your date components println(monthSymbol) 
 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