使用 weekOfYear 从日期格式化程序中获取意外日期
Getting unexpected date from day formatter using weekOfYear
我正在尝试使用当前周开始一周,而我的 return 值是休息一周。例如,如果我输入 weekNumber
17,我预计 4 月 25 日会根据 this 进行 returned,但我会在 4 月 17 日返回。
我确实检查了以下 post,这就是我得到下面函数的地方。
func getFirstDay(WeekNumber weekNumber:Int, CurrentYear currentYear: Int)->String?{
let Calendar = NSCalendar(calendarIdentifier: .gregorian)!
var dayComponent = DateComponents()
dayComponent.weekOfYear = weekNumber
dayComponent.weekday = 1
dayComponent.year = currentYear
var date = Calendar.date(from: dayComponent)
if(weekNumber == 1 && Calendar.components(.month, from: date!).month != 1){
dayComponent.year = currentYear - 1
date = Calendar.date(from: dayComponent)
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
return String(dateFormatter.string(from: date!))
}
有几个问题
- 对于周数,始终使用 ISO8601 日历。
- 对于周数,正确的年份 属性 是
yearForWeekOfYear
。
- 在您的代码中,一周从星期日 (1) 开始,链接站点指的是星期一。
- 在 Swift 中使用原生
Calendar
。
- 在最后一行中,字符串初始值设定项是多余的。
- 不要强制展开日期。
func getFirstDay(weekNumber:Int, currentYear: Int) -> String? {
let calendar = Calendar(identifier: .iso8601)
var dayComponent = DateComponents()
dayComponent.weekOfYear = weekNumber
dayComponent.yearForWeekOfYear = currentYear
guard let date = calendar.date(from: dayComponent) else { return nil }
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy/MM/dd"
return dateFormatter.string(from: date)
}
我正在尝试使用当前周开始一周,而我的 return 值是休息一周。例如,如果我输入 weekNumber
17,我预计 4 月 25 日会根据 this 进行 returned,但我会在 4 月 17 日返回。
我确实检查了以下 post,这就是我得到下面函数的地方。
func getFirstDay(WeekNumber weekNumber:Int, CurrentYear currentYear: Int)->String?{
let Calendar = NSCalendar(calendarIdentifier: .gregorian)!
var dayComponent = DateComponents()
dayComponent.weekOfYear = weekNumber
dayComponent.weekday = 1
dayComponent.year = currentYear
var date = Calendar.date(from: dayComponent)
if(weekNumber == 1 && Calendar.components(.month, from: date!).month != 1){
dayComponent.year = currentYear - 1
date = Calendar.date(from: dayComponent)
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"
return String(dateFormatter.string(from: date!))
}
有几个问题
- 对于周数,始终使用 ISO8601 日历。
- 对于周数,正确的年份 属性 是
yearForWeekOfYear
。 - 在您的代码中,一周从星期日 (1) 开始,链接站点指的是星期一。
- 在 Swift 中使用原生
Calendar
。 - 在最后一行中,字符串初始值设定项是多余的。
- 不要强制展开日期。
func getFirstDay(weekNumber:Int, currentYear: Int) -> String? {
let calendar = Calendar(identifier: .iso8601)
var dayComponent = DateComponents()
dayComponent.weekOfYear = weekNumber
dayComponent.yearForWeekOfYear = currentYear
guard let date = calendar.date(from: dayComponent) else { return nil }
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy/MM/dd"
return dateFormatter.string(from: date)
}