我目前正在从运行联盟的第三方网站下载体育应用程序的夹具列表,因此我必须使用的数据受到限制。
我正在尝试实现一个显示下一个即将到来的灯具的功能。 我的问题是检索的日期如下:
“9月9日星期六”和“星期六3月24日星期六”。
我在DateFormatter中尝试了很多日期格式,但我找不到任何使用此特定格式的日期格式。
如果我尝试使用日期格式化程序中的Date from string方法,并使用上述字符串之一,我会得到一个nil值。
我有一系列灯具,每个灯具都有自己的日期。我需要将这些中的每一个与当前日期进行比较,以确定哪个是下一个。
我对此的临时修复只是循环通过灯具,并且一旦没有结果将其显示为下一个灯具。显然,当游戏因某种原因没有被播放时,这不起作用。
处理这个问题的最佳方法是什么?
答案 0 :(得分:0)
基本上您只需要将当前日期转换为与第三方网站(或相反)的日期相同的格式,以便您轻松比较它们:
let currentDate = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EE MMM"
let firstPartStringDate = dateFormatter.string(from: currentDate)
dateFormatter.dateFormat = "yy"
let lastPartStringDate = dateFormatter.string(from: currentDate)
let day = Calendar.current.component(.day, from: currentDate)
let formatter = NumberFormatter()
formatter.numberStyle = .ordinal
guard let ordinalDay = formatter.string(for: day) else {
return
}
let finalDateString = firstPartStringDate + " \(ordinalDay) " + lastPartStringDate
print(finalDateString)
对于今天的当前日期,您将获得与从第三方网站获得的格式完全相同的格式:
Sun Sep 17th 17
更新:以下是将第一方网站String
转换为Date
的方法,然后将其与当前日期进行比较。这解决了首先在String
内部使用st,nd,rd和th的问题。
// This is the string you get from the website
var webDateString = "Sat 9th Sep 17"
// First, remove the st, nd, rd or th if it exists :
if let stSubrange = webDateString.range(of:"st") {
webDateString.removeSubrange(stSubrange)
} else if let ndSubrange = webDateString.range(of:"nd") {
webDateString.removeSubrange(ndSubrange)
} else if let rdSubrange = webDateString.range(of:"rd") {
webDateString.removeSubrange(rdSubrange)
} else if let thSubrange = webDateString.range(of:"th") {
webDateString.removeSubrange(thSubrange)
}
// Now convert the string to a date :
dateFormatter.dateFormat = "EE MMM dd yy"
guard let formattedDate = dateFormatter.date(from: finalDateString) else {
return
}
// You can now compare formattedDate and the current date easily like so :
let currentDate = Date()
if formattedDate < currentDate {
// Do something interesting here :)
} else {
// Do something else!
}