Swift中如何从Date获取含前置0分钟数的时间?
Swift获取时间时分钟数小于10缺少前置0的解决方法
针对你遇到的问题——用Calendar获取分钟数后,小于10时无法自动补前置0,我给你两种适配当前实现的解决方案:
方案1:直接用字符串格式化补0(适配你的现有代码)
你可以通过String(format:)方法来格式化数字,指定输出为两位数,不足时自动补0。修改后的代码如下:
let date = Date() let calendar = Calendar.current let hour = calendar.component(.hour, from: date) let minutes = calendar.component(.minute, from: date) let day = calendar.component(.day, from: date) let month = calendar.component(.month, from: date) let year = calendar.component(.year, from: date) // 使用%02d确保输出两位数,不足补0;%04d保证年份为四位 timeStamp = "\"\(String(format: "%02d:%02d", hour, minutes))\"" dateFull = "\"\(String(format: "%02d/%02d/%04d", day, month, year))\"" print(dateFull) print(timeStamp)
这里的%02d是格式化占位符:0表示不足位数时用0填充,2表示总长度为2位。这样不管分钟或小时是1位还是2位,都会统一输出两位数的格式。
方案2:改用DateFormatter(更推荐的时间格式化方式)
如果你后续有更多时间格式化的需求,DateFormatter是Swift官方更推荐的工具,它能自动处理前置0、时区、本地化等问题,代码也更简洁:
let date = Date() // 格式化时间(HH表示24小时制,hh是12小时制) let timeFormatter = DateFormatter() timeFormatter.dateFormat = "HH:mm" let timeStamp = "\"\(timeFormatter.string(from: date))\"" // 格式化日期 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy" let dateFull = "\"\(dateFormatter.string(from: date))\"" print(dateFull) print(timeStamp)
这种方式不需要手动拆分日期组件,直接指定格式字符串就能得到符合要求的结果,维护起来也更方便。
内容的提问来源于stack exchange,提问作者Luke Ireton
相关产品推荐
相关产品推荐

