Swift中获取次日凌晨2点日期及检查时间戳是否早于该时间
Swift 日期处理:获取次日凌晨2点及时间比较
1. 获取次日凌晨2点的Date
直接通过累加秒数(比如加86400秒)容易遇到夏令时、闰秒等边界问题,推荐用Calendar类精准处理:
func getTomorrow2AM() -> Date { let calendar = Calendar.current // 计算当前日期的次日(仅日期部分,不含时间) guard let tomorrowDate = calendar.date(byAdding: .day, value: 1, to: Date()) else { fatalError("无法计算次日日期") } // 提取次日的年、月、日,再设置小时为2,其余时间组件清零 let dateComponents = calendar.dateComponents([.year, .month, .day], from: tomorrowDate) guard let tomorrow2AM = calendar.date(from: DateComponents( year: dateComponents.year, month: dateComponents.month, day: dateComponents.day, hour: 2 )) else { fatalError("无法构造次日凌晨2点的日期对象") } return tomorrow2AM }
这个方法会自动适配时区、夏令时等特殊场景,比直接操作时间戳更可靠。
2. 检查timestamp是否早于次日凌晨2点
先将timestamp转换为Date对象,再和前面得到的次日凌晨2点日期做比较:
func isTimestampEarlierThanTomorrow2AM(timestamp: TimeInterval) -> Bool { let targetDate = Date(timeIntervalSince1970: timestamp) let tomorrow2AM = getTomorrow2AM() return targetDate < tomorrow2AM }
注意:如果你的timestamp是毫秒级,需要先除以1000转成秒级再传入,因为
Date(timeIntervalSince1970:)接收的是从1970年开始的秒数。
内容的提问来源于stack exchange,提问作者Duncan C
相关产品推荐
相关产品推荐

