FSCalendar的didSelect方法选中日期后显示错误日期的问题求助
解决FSCalendar didSelect回调返回日期与选中日期不符的问题
你碰到的这个问题挺常见的——选中2019年11月9日,回调却返回2019-11-30 18:30:00 +0000,我来帮你拆解可能的原因和解决办法:
1. 先排查时区匹配问题
你看到的输出是UTC时区的日期,FSCalendar默认可能会用UTC时间返回回调日期,但我们实际需要的是本地时区的日期。可以先给你的日历实例配置本地时区和区域:
// 在初始化FSCalendar的代码里添加这两行 yourCalendar.locale = Locale.current yourCalendar.timeZone = TimeZone.current
同时,打印或处理日期时,用本地时区的DateFormatter来格式化,避免UTC和本地时区的转换混淆:
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" formatter.timeZone = TimeZone.current // 强制使用本地时区 let formattedDate = formatter.string(from: date) print("selected date \(formattedDate)") setCalendarDate(pDate: date) }
2. 检查setCalendarDate方法的逻辑
你在回调里调用了setCalendarDate(pDate: date),有可能是这个方法内部对日期做了错误处理——比如误加了天数、月份,或者时区转换出了问题。可以先暂时注释掉这个方法调用,单独打印日期,看看是否正常。如果注释后日期显示正确,那问题就出在这个方法里,需要排查它的日期运算逻辑。
3. 确认FSCalendar版本兼容性
如果上面的方法都没解决问题,建议检查你使用的FSCalendar版本是否存在已知的日期bug。可以尝试升级到最新稳定版,或者看看官方维护的issue里有没有类似问题的解决方案。
内容的提问来源于stack exchange,提问作者Priyas
相关产品推荐
相关产品推荐

