将小时和分钟整数格式化为字符串“9:30 am”

问题描述

如何将小时和分钟整数值表示为格式为“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)
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...