问题描述
如何将小时和分钟整数值表示为格式为“9:30 am”的字符串?
目前,我有:
let hour: Int = 9
let minute: Int = 30
var dateComponents = DateComponents()
dateComponents.hour = hour
dateComponents.minute = minute
let time: String = DateComponentsFormatter.localizedString(from: dateComponents,unitsStyle: DateComponentsFormatter.UnitsStyle.positional)
print(time) // Prints "9:30",not "9:30 am"
我知道我可以在最后手动连接时间子午线,但我希望有一个内置函数。也许是不同的 UnitsStyle
?
解决方法
您可以使用 DateFormatter
来实现这一点。
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
formatter.amSymbol = "am"
formatter.pmSymbol = "pm"
let dateString = formatter.string(from: Date())
print(dateString) // prints "12:17 pm"
如果您只想在小时中包含个位数,那么您只需在 dateFormat 中包含一个“h”:
formatter.dateFormat = "h:mm a" // prints "1:30 pm" instead of "01:30 pm"
,
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
formatter.calendar = .current
let hour: Int = 9
let minute: Int = 30
var dateComponents = DateComponents()
dateComponents.hour = hour
dateComponents.minute = minute
If let fixedDate: Date = Calendar.current.date(from: dateComponents) {
let formattedString = formatter.string(from: fixedDate)
print(formattedString) //prints 09:30 AM
}
您需要添加当前日历/日期,以根据我所知从您的时间获取上午或下午。
编辑:
感谢 Leo Dabus 在评论中指出这一点:上述方法将导致日期为 0001 年 1 月 1 日,如果日期对您很重要,您必须指定日期(日/月/年)
例如:
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
formatter.calendar = .current
let hour: Int = 9
let minute: Int = 30
var dateComponents = DateComponents()
dateComponents.hour = hour
dateComponents.minute = minute
dateComponents.year = Calendar.current.component(.year,from: date)
dateComponents.month = Calendar.current.component(.month,from: date)
dateComponents.day = Calendar.current.component(.day,from: date)
If let fixedDate: Date = Calendar.current.date(from: dateComponents) {
let formattedString = formatter.string(from: fixedDate)
print(formattedString)
}