ios - Swift 中下一个可用日期的日期格式

标签 ios swift date dateformatter

我目前正在从运营联盟的第三方网站下载体育应用程序的赛程列表,因此我必须使用的数据受到限制。

我正在尝试实现一个显示下一场比赛的功能。 我的问题是检索的日期如下所示:

例如“2017 年 9 月 9 日星期六”和“2018 年 3 月 24 日星期六”。

我已经在 DateFormatter 中尝试了多种据我所知的日期格式,但找不到任何使用此特定格式的内容。

如果我尝试将日期格式化程序中的 Date from string 方法与上述字符串之一一起使用,我会得到一个 nil 值。

我有一系列的赛程,每个赛程都有自己的日期。我需要将每个日期与当前日期进行比较,以确定下一个日期。

我对此的临时解决方案只是循环遍历灯具,一旦没有结果就将其显示为下一个灯具。显然,当游戏由于某种原因未玩时,这不起作用。

处理这个问题的最佳方法是什么?

最佳答案

基本上,您只需将当前日期转换为与从第三方网站获取的日期相同的格式(或相反),以便您可以轻松比较它们:

    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!
    }

关于ios - Swift 中下一个可用日期的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264358/

相关文章:

php - 使用 PHP 递归列出所有带日期的文件

ios - 如何在 iOS 上获取内部名称?

ios - NSOperationQueue 和后台支持

ios - 如何准确检测设备型号?

ios - 片段着色器中的纹理读取

java - 如何获取日期格式以大写月份和日期

ios - 在 iOS App 中将 SQLite 数据库从 Titanium 迁移到 Ionic

Objective-C 代码 Swift 框架内部

ios - UICollectionViewCell 阴影与装饰 View 不一致

sql - 添加和递增日期和时间 (Postgresql)