swift - Swift - 为当前周创建一个有效日期,仅将星期几作为字符串
问题描述
我需要仅使用一周中的某一天为当前一周(周日 - 周六)创建一个有效日期。
例如:今天的日期是 2020 年 9 月 17 日。所以周范围是 9 月 13 日星期日 - 9 月 19 日星期六。
给定“Tuesday”,我需要将此字符串转换为:Tuesday, September 15th, 2020 作为日期类型。
我试过这样做,但我想出了一个非常混乱、不可靠的解决方案。
任何帮助是极大的赞赏。
解决方案
这是我要做的:
let calendar = Calendar.current
var dateComponents = calendar.dateComponents([.year, .month, .weekOfYear], from: Date())
dateComponents.weekday = 1 // Figure out a way to map "Sunday" = 1, "Monday" = 2, etc..
let date = calendar.date(from: dateComponents)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"
print(dateFormatter.string(from: date!)) // Sunday, September 13, 2020
我可能会考虑为工作日创建一个枚举。您可以使用 String 值对其进行初始化,并使用一个函数为其返回 Int 值。
enum Weekday: Int {
case sunday = 1
case monday = 2
case tuesday = 3
case wednesday = 4
case thursday = 5
case friday = 6
case saturday = 7
init?(_ stringValue: String) {
switch stringValue {
case "Sunday":
self = .sunday
case "Monday":
self = .monday
case "Tuesday":
self = .tuesday
case "Wednesday":
self = .wednesday
case "Thursday":
self = .thursday
case "Friday":
self = .friday
case "Saturday":
self = .saturday
default:
return nil
}
}
}
然后使用它你会做:
if let weekday = Weekday("Wednesday") {
// ... code above
dateComponents.weekday = weekday.rawValue
// ... some more code
}