使用DateComponents创建日期

问题描述 投票:0回答:1

我想得到一周的第一天和最后一天。但我的结果与apple:https://developer.apple.com/documentation/foundation/nsdatecomponents/1410442-weekday的文档不符

这是我的功能:

func startAndEndDateOfWeek(weekOfYearWithYear: (week: Int,year: Int)) -> (start: Date, end: Date) {
    var output = (start: Date.init(), end: Date.init())

    let calendar = Calendar(identifier: .gregorian)
    var firstDayComponents = DateComponents()
    firstDayComponents.weekOfYear = weekOfYearWithYear.week
    firstDayComponents.yearForWeekOfYear = weekOfYearWithYear.year
    firstDayComponents.weekday = 1

    let firstDay = calendar.date(from: firstDayComponents)

    var lastDayComponents = DateComponents()
    lastDayComponents.weekOfYear = weekOfYearWithYear.week
    lastDayComponents.yearForWeekOfYear = weekOfYearWithYear.year
    lastDayComponents.weekday = 2

    let lastDay = calendar.date(from: lastDayComponents)
    output = (start: firstDay!, end: lastDay!)
    return output
}

.weekday = 2 - >导致星期日,而不是0。

enter image description here

我也希望有一整天而不是16:00。

swift calendar nsdatecomponents
1个回答
2
投票

几点意见:

  1. 在公历中,工作日= 1表示星期日;工作日= 2表示星期一;您可以查看calendar.maximumRange(of: .weekday)以获得有效值的范围,您可以查看calendar.weekdaySymbols以查看这些weekDay值的含义(例如“Sun”,“Mon”,“Tue”,“Wed”,“Thu”, “星期五”和“星期六”)。
  2. 你说: 我也希望有一整天而不是16:00。 Date对象引用了一个时刻。所以它不能代表“整天”。但它可以代表午夜(在你的时区午夜可能是格林威治标准时间/ UTC /祖鲁语下午4点)。 或者,你可以返回一个代表一段时间的DateIntervalfunc interval(ofWeek week: Int, in year: Int) -> DateInterval { let calendar = Calendar.current let date = DateComponents(calendar: calendar, weekOfYear: week, yearForWeekOfYear: year).date! return calendar.dateInterval(of: .weekOfYear, for: date)! } 然后 let formatter = DateIntervalFormatter() formatter.dateStyle = .short formatter.timeStyle = .short let year = Calendar.current.component(.year, from: Date()) let dateInterval = interval(ofWeek: 2, in: year) print(formatter.string(from: dateInterval)) 在美国语言环境中,间隔从1月6日开始: 1/6/19,12:00 AM - 1/13/19,12:00 AM 而在德国语言环境中,间隔从7日开始: 07.01.19,00:00 - 14.01.19,00:00
  3. 如果您想要开始一周的第一天和一周的最后一天,您可以: func startAndEndDate(ofWeek week: Int, in year: Int) -> (Date, Date) { let date = DateComponents(calendar: calendar, weekOfYear: week, yearForWeekOfYear: year).date! let lastDate = calendar.date(byAdding: .day, value: 6, to: date)! return (date, lastDate) } 然后 let formatter = DateFormatter() formatter.dateStyle = .short let year = Calendar.current.component(.year, from: Date()) let (start, end) = startAndEndDate(ofWeek: 2, in: year) print(formatter.string(from: start), "-", formatter.string(from: end))
© www.soinside.com 2019 - 2024. All rights reserved.