Swift:如何将指定日期时间修正为07:00:00(解决秒数问题)
如何将日期时间调整为指定的时分秒(如07:00:00)
你遇到的问题根源是date(byAdding:)仅修改指定的日期组件(此处为分钟),其余组件(如秒数)会保留原时间的数值。要得到2022-10-27 07:00:00 +0000的结果,需要同时调整分钟并清零秒数,或直接设置目标时分秒。
方法一:直接设置目标时分秒(推荐)
使用Calendar的date(bySettingHour:minute:second:of:)方法,直接替换原日期的时分秒组件,一步到位:
let targetDateTime = Calendar.current.date(bySettingHour: 7, minute: 0, second: 0, of: dateTime)
该方法会保留原日期的年、月、日、时区等信息,仅将时分秒设置为指定值。
方法二:先偏移分钟再清零秒数
如果需要先基于原时间做偏移(比如加1分钟),再单独清零秒数,可以分两步操作:
// 第一步:给原时间加1分钟 guard let afterAddingMinute = Calendar.current.date(byAdding: .minute, value: 1, to: dateTime) else { // 处理日期转换失败的异常情况 return } // 第二步:将秒数设置为0 let targetDateTime = Calendar.current.date(bySetting: .second, value: 0, of: afterAddingMinute)
方法三:通过日期组件重构日期
提取原日期的核心组件(年、月、日、时区),手动设置目标时分秒后重构日期:
var components = Calendar.current.dateComponents([.year, .month, .day, .timeZone], from: dateTime) components.hour = 7 components.minute = 0 components.second = 0 let targetDateTime = Calendar.current.date(from: components)
内容的提问来源于stack exchange,提问作者tech_human
相关产品推荐
相关产品推荐

