首先,我的日期是字符串格式为:" 06-04-2017 06:28:17 pm"
然后我使用:
转换为日期((let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy hh:mm:ss a"
formatter.timeZone = TimeZone(abbreviation: "GMT")
let startdate = formatter.date(from: sdate!)
print(startdate)
这是上面的输出日期:
startdate = 2017-04-06 18:28:17 +0000
但是,当我尝试将分钟设置为使用以下代码为0时。我改变了一天。
let calender = Calendar.current
calendar.timeZone = TimeZone(abbreviation: "UTC")!
let date = calender.date(bySettingHour: Int(hour)!, minute: 00, second: 00, of: startdate!)
print(date)
输出:2017-04-07 12:15:00 0000
我设置该时区后,我的时区为 5:45。我有同样的错误。
任何帮助。高度赞赏。
使用以下代码,我得到的日期相同:
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy hh:mm:ss a"
formatter.timeZone = TimeZone(abbreviation: "GMT")
let startdate = formatter.date(from: sdate!)
print(startdate)
**,但我无法将其设置为一分钟为0。**
swift 5
此解决方案只是分钟,第二个解决方案而不会与小时混乱。
extension Date {
func startOfHour() -> Date?
{
let calendar = Calendar.current
var components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: self)
components.minute = 0
components.second = 0
return calendar.date(from: components)
}
}
使用:
Date().startOfHour
打印输出:
日期:2019-09-05 15:09:57 0000
日期开始:可选(2019-09-05 15:00:00 0000(
首先,您的问题缺少您在第二个片段中通过时通过时通过的部分。
第二,您应该使用来自日历的正确方法来设置一个组件:
let roundedDate = Calendar.current.date(bySetting: .minute, value: 0, of: <# youDateObject #>)
对不起,我是从手机写的,因此代码可能不是确切的,但您会很容易找到功能。
打印日期之前,请使用日历将其转换为日期组件;然后将dateComponents.minute值设置为0,然后将其重新转换为日期:
let dateComponents = Calendar.current.dateComponents(fromDate: yourDate)
dateComponents.minute = 0
let finishedDate = Calendar.current.date(fromComponents: dateComponents)
print(finishedDate)
哦,是的,我建议将时区设置为TimeZone.current
,除非您只想使用特定时区!
我不明白您对那些时区的目标。如果您只想将您作为字符串的日期弄清到最新的整个小时,这将是到达那里的一种方法:
extension Date {
public init?(fromStringToBeRounded dateString: String) {
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy hh:mm:ss a"
if let startdate = formatter.date(from: sdate) {
let components = Calendar.current.dateComponents([.year, .month, .day, .hour], from: startdate)
if let adjustedDate = Calendar.current.date(from: components) {
self = adjustedDate
} else { return nil }
} else { return nil }
}
}
let sdate = "06-04-2017 06:28:17 PM"
Date(fromStringToBeRounded: sdate)! // In production code you better safely unwrap this
让我知道您对时区转换的意图,我会很乐意调整上述代码。