Ios NSDateFormatter dateFormatFromTemplate问题

Ios NSDateFormatter dateFormatFromTemplate问题,ios,swift,nsdateformatter,Ios,Swift,Nsdateformatter,我需要在数小时和数分钟内恢复本地化格式。小时按预期工作,但分钟返回“m”?为什么它不返回“mm” 你试过使用吗 此处再次作为检索所需值的函数: func formattedTimeString(unitToSet: NSCalendarUnit, selectedValue: Int, template: String) -> String? { let date: NSDate = NSDate() let calendar = NSCalendar.currentCal

我需要在数小时和数分钟内恢复本地化格式。小时按预期工作,但分钟返回“m”?为什么它不返回“mm”

你试过使用吗

此处再次作为检索所需值的函数:

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
}
如果您还有其他问题,也可以使用。

您是否尝试过使用

此处再次作为检索所需值的函数:

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
}

如果您还有其他问题,也可以使用。

可能是因为您不会单独显示分钟和前导零(但我在猜测)。为什么不从“HH:mm”创建模板?我正在创建一个时间选择,其中小时和分钟由不同的UI元素设置。第一个是HH格式,另一个是mm格式。可能是因为你不会单独用前导零显示分钟(但我在猜测)。为什么不从“HH:mm”创建模板?我正在创建一个时间选择,其中小时和分钟由不同的UI元素设置。第一种是HH格式,另一种是mm格式。是的,但这不是我想要的。我想把小时和分钟分开。你说分开是什么意思?您正在使用不同的UI元素,分别设置小时和分钟,对吗?为什么不保留对选定值的引用,并在需要时更新所有内容?在我的设计中,数字是动画。如果更改了小时数,小时UI元素将“滚动”到它设置为的任何数字,因此它不能是同时包含小时和分钟的字符串。希望这是有道理的,它可以。你只需要知道选哪一个。。。不管怎样,我已经更新了答案。对,这主要起到了作用。现在唯一的一件事是,如果区域设置使用AM/PM格式而不是24小时时钟,22需要变成10。你知道你的解决方案会包含什么吗?即使是在en_US地区,我也得到了22分。我可能自己能解决这个问题,所以我会把这个标记为一个公认的答案。谢谢。是的,但那不是我想要的。我想把小时和分钟分开。你说分开是什么意思?您正在使用不同的UI元素,分别设置小时和分钟,对吗?为什么不保留对选定值的引用,并在需要时更新所有内容?在我的设计中,数字是动画。如果更改了小时数,小时UI元素将“滚动”到它设置为的任何数字,因此它不能是同时包含小时和分钟的字符串。希望这是有道理的,它可以。你只需要知道选哪一个。。。不管怎样,我已经更新了答案。对,这主要起到了作用。现在唯一的一件事是,如果区域设置使用AM/PM格式而不是24小时时钟,22需要变成10。你知道你的解决方案会包含什么吗?即使是在en_US地区,我也得到了22分。我可能自己能解决这个问题,所以我会把这个标记为一个公认的答案。谢谢
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
}