ios - NSDateFormatter dateFormatFromTemplate 问题

标签 ios swift nsdateformatter

我需要取回小时和分钟的本地化格式。时间按预期工作,但分钟返回“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 ,如果您还有其他问题。

关于ios - NSDateFormatter dateFormatFromTemplate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31771885/

相关文章:

ios - (稍微)使用 objective-c 的高级线性代数

javascript - WKWebView 返回(_ :) evaluateJavaScript Fails if going back more than 2 in history

ios - UICollectionViewCell 的子类中的“ socket 无法连接到重复内容”

ios - UITextField 起始光标位置错误

ios - 如何从 iDevices 获取 24 小时制时间?

objective-c - NSDate 和 NSTimezone 的时间错误

ios - 移动 iOS 后单击时按钮消失

swift - 如何抓取凭证值重新认证? (问题已更新)

ios - 不可编辑的数据库本地存储在 iOS 应用程序中

ios - 将 12 小时日期格式快速转换为 24 小时格式,反之亦然?