为什么我的 JTAppleCalendar 提前 1 天?
Why is my JTAppleCalendar 1 day ahead?
我正在使用 JTAppleCalendar,每个月的日期都比应有的日期提前 1 天。这是我的配置代码:
func configureCalendar(_ calendar: JTAppleCalendarView) -> ConfigurationParameters {
formatter.dateFormat = "yyyy MM dd"
formatter.timeZone = Calendar.current.timeZone
formatter.locale = Calendar.current.locale
let currentYear = Calendar.current.component(.year, from: Date())
let stringCurrentYear = String(currentYear)
let nextYear = currentYear + 1
let stringNextYear = String(nextYear)
let currentMonth = Calendar.current.component(.month, from: Date())
let stringCurrentMonth = String(currentMonth)
let startDate = formatter.date(from: "\(stringCurrentYear) \(stringCurrentMonth) 01")!
let endDate = formatter.date(from: "\(stringNextYear) 12 31")!
let parameters = ConfigurationParameters(startDate: startDate, endDate: endDate)
return parameters
}
这是当前输出:
2018 年 1 月 1 日应该是星期一,但显示为星期二。
找到我自己的答案。我使用以下代码修复它:
let parameters = ConfigurationParameters(
startDate: startDate,
endDate: endDate,
numberOfRows: 6,
calendar: calendar,
generateOutDates: .tillEndOfRow,
firstDayOfWeek: .monday
)
return parameters
我认为问题是默认情况下一周的第一天是星期日。所以将其设置为星期一解决了问题。
firstDayOfWeek 参数应该只控制您在最左边的列中看到的星期几,所以我怀疑这是否是解决方案。
鉴于您将 nextYear 用作 currentYear + 1,它看起来更像是您在屏幕截图中看到的 2019 年 1 月。
与其使用格式化程序,不如尝试使用 DateComponents,如下所示:
let calendar = Calendar.current
let date = Date()
let currentYear = Calendar.current.component(.year, from: Date())
var dateOneComponents = DateComponents()
dateOneComponents.year = currentYear
dateOneComponents.month = 1
dateOneComponents.day = 1
let dateOne = calendar.date(from: dateOneComponents)
var dateTwoComponents = DateComponents()
dateTwoComponents.year = currentYear
dateTwoComponents.month = 12
dateTwoComponents.day = 31
let dateTwo = calendar.date(from: dateTwoComponents)
我正在使用 JTAppleCalendar,每个月的日期都比应有的日期提前 1 天。这是我的配置代码:
func configureCalendar(_ calendar: JTAppleCalendarView) -> ConfigurationParameters {
formatter.dateFormat = "yyyy MM dd"
formatter.timeZone = Calendar.current.timeZone
formatter.locale = Calendar.current.locale
let currentYear = Calendar.current.component(.year, from: Date())
let stringCurrentYear = String(currentYear)
let nextYear = currentYear + 1
let stringNextYear = String(nextYear)
let currentMonth = Calendar.current.component(.month, from: Date())
let stringCurrentMonth = String(currentMonth)
let startDate = formatter.date(from: "\(stringCurrentYear) \(stringCurrentMonth) 01")!
let endDate = formatter.date(from: "\(stringNextYear) 12 31")!
let parameters = ConfigurationParameters(startDate: startDate, endDate: endDate)
return parameters
}
这是当前输出:
2018 年 1 月 1 日应该是星期一,但显示为星期二。
找到我自己的答案。我使用以下代码修复它:
let parameters = ConfigurationParameters(
startDate: startDate,
endDate: endDate,
numberOfRows: 6,
calendar: calendar,
generateOutDates: .tillEndOfRow,
firstDayOfWeek: .monday
)
return parameters
我认为问题是默认情况下一周的第一天是星期日。所以将其设置为星期一解决了问题。
firstDayOfWeek 参数应该只控制您在最左边的列中看到的星期几,所以我怀疑这是否是解决方案。
鉴于您将 nextYear 用作 currentYear + 1,它看起来更像是您在屏幕截图中看到的 2019 年 1 月。
与其使用格式化程序,不如尝试使用 DateComponents,如下所示:
let calendar = Calendar.current
let date = Date()
let currentYear = Calendar.current.component(.year, from: Date())
var dateOneComponents = DateComponents()
dateOneComponents.year = currentYear
dateOneComponents.month = 1
dateOneComponents.day = 1
let dateOne = calendar.date(from: dateOneComponents)
var dateTwoComponents = DateComponents()
dateTwoComponents.year = currentYear
dateTwoComponents.month = 12
dateTwoComponents.day = 31
let dateTwo = calendar.date(from: dateTwoComponents)