Swift Date Formatter设置奇怪的一天(86)
Swift Date Formatter setting an strange day (86)
构建 MacOS 应用程序。
不确定 rails 的发展方向。我正在尝试获取一周的开始和结束时间 (Sunday/Saturday) 并正在使用此功能:
func getStartAndEndOfWeek(_ dateToCheck:Date) {
//vars
var sundayDiff = 0
var saturdayDiff = 0
//set up a date formatter
var formatter:DateFormatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "YYYY-MM-DD"
//get day of this startDate
let calendar = Calendar.current
let dayComponents = calendar.dateComponents([.weekday], from: Date())
if let dayOfWeek = dayComponents.weekday {
sundayDiff = dayOfWeek - 1
saturdayDiff = 7 - dayOfWeek
}
//get sunday as date
let sunday:Date = Calendar.current.date(byAdding: .day, value: -1 * sundayDiff, to: dateToCheck)!
let saturday:Date = Calendar.current.date(byAdding: .day, value: saturdayDiff, to: dateToCheck)!
let strSunday = formatter.string(from: sunday)
}
打印 sunday
给我正确的日期(当前日期是 2022 年 3 月 30 日,星期三):
2022-03-27 15:36:45 +0000
将 sunday
转换为字符串给了我一天 86
2022-03-86
我做错了什么?
正确的语法是:
formatter.dateFormat = "yyyy-MM-dd"
这里大小写很重要。
这里的问题是大写的 D 表示年中的第几天而不是每月的第几天。另请注意,大写的 Y 表示 yearForWeekOfYear。
如果您需要进一步参考,可以查看此
构建 MacOS 应用程序。
不确定 rails 的发展方向。我正在尝试获取一周的开始和结束时间 (Sunday/Saturday) 并正在使用此功能:
func getStartAndEndOfWeek(_ dateToCheck:Date) {
//vars
var sundayDiff = 0
var saturdayDiff = 0
//set up a date formatter
var formatter:DateFormatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "YYYY-MM-DD"
//get day of this startDate
let calendar = Calendar.current
let dayComponents = calendar.dateComponents([.weekday], from: Date())
if let dayOfWeek = dayComponents.weekday {
sundayDiff = dayOfWeek - 1
saturdayDiff = 7 - dayOfWeek
}
//get sunday as date
let sunday:Date = Calendar.current.date(byAdding: .day, value: -1 * sundayDiff, to: dateToCheck)!
let saturday:Date = Calendar.current.date(byAdding: .day, value: saturdayDiff, to: dateToCheck)!
let strSunday = formatter.string(from: sunday)
}
打印 sunday
给我正确的日期(当前日期是 2022 年 3 月 30 日,星期三):
2022-03-27 15:36:45 +0000
将 sunday
转换为字符串给了我一天 86
2022-03-86
我做错了什么?
正确的语法是:
formatter.dateFormat = "yyyy-MM-dd"
这里大小写很重要。
这里的问题是大写的 D 表示年中的第几天而不是每月的第几天。另请注意,大写的 Y 表示 yearForWeekOfYear。
如果您需要进一步参考,可以查看此