如何设置当前以外的 DateComponentsFormatter 语言环境?
How to set DateComponentFormatter's local other than current?
情况
我有一个函数,它使用 DateComponentFormatter
的函数 fun string(from: Date, to: Date)
来 return 一个基于两个日期之间的时差的格式化字符串,它工作得很好。但是我想return这个格式化的字符串总是英文(目前根据设备的本地格式)。
问题
如何像 DateFormatter
一样设置 DateComponentFormatter
的本地化?如果不能,你会如何进行?
代码:
import Foundation
func returnRemainingTimeAsString(currentDate: Date, nextDate: Date)->String {
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
dateComponentsFormatter.allowedUnits = [.day, .hour, .minute, .second]
dateComponentsFormatter.maximumUnitCount = 1
let differenceAsString = dateComponentsFormatter.string(from: currentDate, to: nextDate)!
return differenceAsString
}
let currentDate = Date()
let futureDate = currentDate.addingTimeInterval(3604)
returnRemainingTimeAsString(currentDate: currentDate, nextDate: futureDate)
// prints 1 hour (if devices local is English) or 1 hora (if Spanish),
// and I want it to return always 1 hour.
DateComponentsFormatter
有一个 calendar
属性。
获取当前日历,设置其区域设置并将日历分配给格式化程序。
let dateComponentsFormatter = DateComponentsFormatter()
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
dateComponentsFormatter.calendar = calendar
dateComponentsFormatter.unitsStyle = .full
...
要使格式化程序显示本地化字符串,您必须在目标设置中指定支持的语言环境。
如果设备的当前语言环境是目标设置中支持的语言环境之一,您将获得本地化的日期组件,而无需手动设置格式化程序的 calendar
。如果您想要设备当前区域设置以外的区域设置,则只需要这样做。
情况
我有一个函数,它使用 DateComponentFormatter
的函数 fun string(from: Date, to: Date)
来 return 一个基于两个日期之间的时差的格式化字符串,它工作得很好。但是我想return这个格式化的字符串总是英文(目前根据设备的本地格式)。
问题
如何像 DateFormatter
一样设置 DateComponentFormatter
的本地化?如果不能,你会如何进行?
代码:
import Foundation
func returnRemainingTimeAsString(currentDate: Date, nextDate: Date)->String {
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
dateComponentsFormatter.allowedUnits = [.day, .hour, .minute, .second]
dateComponentsFormatter.maximumUnitCount = 1
let differenceAsString = dateComponentsFormatter.string(from: currentDate, to: nextDate)!
return differenceAsString
}
let currentDate = Date()
let futureDate = currentDate.addingTimeInterval(3604)
returnRemainingTimeAsString(currentDate: currentDate, nextDate: futureDate)
// prints 1 hour (if devices local is English) or 1 hora (if Spanish),
// and I want it to return always 1 hour.
DateComponentsFormatter
有一个 calendar
属性。
获取当前日历,设置其区域设置并将日历分配给格式化程序。
let dateComponentsFormatter = DateComponentsFormatter()
var calendar = Calendar.current
calendar.locale = Locale(identifier: "en_US_POSIX")
dateComponentsFormatter.calendar = calendar
dateComponentsFormatter.unitsStyle = .full
...
要使格式化程序显示本地化字符串,您必须在目标设置中指定支持的语言环境。
如果设备的当前语言环境是目标设置中支持的语言环境之一,您将获得本地化的日期组件,而无需手动设置格式化程序的 calendar
。如果您想要设备当前区域设置以外的区域设置,则只需要这样做。