NSDateFormatter dateFormatFromTemplate 问题
NSDateFormatter dateFormatFromTemplate issue
我需要恢复小时和分钟的本地化格式。小时数按预期工作,但分钟数 returns "m"?为什么不返回 "mm"?
let locale = NSDateFormatter().locale
NSDateFormatter.dateFormatFromTemplate("HH", options: 0, locale:locale)
//Returns "HH" in US English and "H时" in Chinese (Simplified)
NSDateFormatter.dateFormatFromTemplate("mm", options: 0, locale:locale)
//Returns "m" for both???
您尝试过使用 NSDateComponents 吗?
let date: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute, fromDate: date)
components.hour = 20
components.minute = 10
if let newDate = calendar.dateFromComponents(components) {
let dateFormatter = NSDateFormatter()
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.stringFromDate(newDate)
}
这里再次作为检索您需要的值的函数:
func formattedTimeString(unitToSet: NSCalendarUnit, selectedValue: Int, template: String) -> String?
{
let date: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute, fromDate: date)
if unitToSet == .CalendarUnitHour
{
components.hour = selectedValue
} else
{
components.minute = selectedValue
}
if let newDate = calendar.dateFromComponents(components) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate(template, options: 0, locale: NSLocale.currentLocale())
return dateFormatter.stringFromDate(newDate)
}
return nil
}
if let hours: String = formattedTimeString(.CalendarUnitHour, 22, "HH")
{
println(hours) // prints 22
}
if let minutes: String = formattedTimeString(.CalendarUnitMinute, 33, "mm")
{
println(minutes) // prints 33
}
如果您还有其他问题,也可以使用 Gist。
我需要恢复小时和分钟的本地化格式。小时数按预期工作,但分钟数 returns "m"?为什么不返回 "mm"?
let locale = NSDateFormatter().locale
NSDateFormatter.dateFormatFromTemplate("HH", options: 0, locale:locale)
//Returns "HH" in US English and "H时" in Chinese (Simplified)
NSDateFormatter.dateFormatFromTemplate("mm", options: 0, locale:locale)
//Returns "m" for both???
您尝试过使用 NSDateComponents 吗?
let date: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute, fromDate: date)
components.hour = 20
components.minute = 10
if let newDate = calendar.dateFromComponents(components) {
let dateFormatter = NSDateFormatter()
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.stringFromDate(newDate)
}
这里再次作为检索您需要的值的函数:
func formattedTimeString(unitToSet: NSCalendarUnit, selectedValue: Int, template: String) -> String?
{
let date: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitMinute, fromDate: date)
if unitToSet == .CalendarUnitHour
{
components.hour = selectedValue
} else
{
components.minute = selectedValue
}
if let newDate = calendar.dateFromComponents(components) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate(template, options: 0, locale: NSLocale.currentLocale())
return dateFormatter.stringFromDate(newDate)
}
return nil
}
if let hours: String = formattedTimeString(.CalendarUnitHour, 22, "HH")
{
println(hours) // prints 22
}
if let minutes: String = formattedTimeString(.CalendarUnitMinute, 33, "mm")
{
println(minutes) // prints 33
}
如果您还有其他问题,也可以使用 Gist。