swift - 如何 swift 开始和结束一周?

标签 swift date time

<分区>

如何在 swift 中获取一周的开始和结束? 这是我的代码

extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }

    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}

我是这样打电话的

let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek
print(startWeek!)
print(endWeek!)
var dateFormat1 = DateFormatter()
dateFormat1.dateFormat = "dd-MM-yy"
let startWeek2 = dateFormat1.string(from: startWeek!)
var dateFormat12 = DateFormatter()
dateFormat12.dateFormat = "dd-MM-yy"
let endWeek2 = dateFormat12.string(from: endWeek!)
print(startWeek2)
print(endWeek2)

和输出

2017-09-24 18:30:00 +0000
2017-09-30 18:30:00 +0000
25-09-17
01-10-17

最佳答案

您的代码运行良好。如果您要在 Playground 中运行代码,您会看到实际的 Date 对象,而不是 String 表示形式。即使您没有指定 DateFormatter,在执行 print(Date()) 时,Swift 也会使用 DateFormatter 来打印Date 对象,因此该值将是相对时间,而不是 Date 对象提供的绝对时间点。

在 Playground 中,您可以看到实际的 startOfWeek"Sep 25, 2017 at 12:00 AM",而 endOfWeek“Oct 1, 2017 at 12:00 AM”,这是本周的正确值。

不要使用 print(Date()) 来检查 Date 对象的正确性,因为如您所见,由于底层的原因,它会产生意想不到的结果使用了 DateFormatter

关于swift - 如何 swift 开始和结束一周?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46402684/

相关文章:

swift - 在 Swift 2 中连接字符串的最快方法

java - SHA256 : different output in Swift and Java?

ios - 在 Swift 中使用 Objective-C block 时保留参数类型

Power BI 中的 R 脚本将日期返回为 Microsoft.OleDb.Date

javascript - 日期对象未返回预期年份

java - 30秒好像是1小时30秒?

ios - 更改 Xcode 8 中的签名团队

java - 月份和 java.util.Formatter

c# - 以微秒为单位的日期时间

time - 夏令时差距/重叠定义?什么时候给他们 "correct"?