如何将String转换为Date只获取Swift中的日期而不是时间?

时间:2018-06-06 05:02:25

标签: swift date-formatting

我目前从API获取日期格式为:

  

“2018-06-09T09:20:48”

我想将此日期与今天,明天进行比较,否则我还有另一个条件。

我所做的是:

func dateFormatter(date: String){
     let today = Date() //2018-06-06 04:54:46 +0000

     let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today) //2018-06-07 04:54:46 +0000

     let dateFormatter = DateFormatter()

     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

     let date_db = dateFormatter.date(from: date) //2018-06-06 12:32:02 +0000
     if today == date_db{
         print("It is today")
     }
     else if tomorrow = date_db {
         print("It is tomorrow")
     }
     else {
         "After Some Days"
     }
 }

这不起作用,因为它将dateTime与dateTime进行比较,这就是原因,但我只想要今天,明天和date_db的日期,以便我可以比较它们。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

几个问题。首先,你的日期格式是错误的。你有错误的时区。您的区域设置错误。修复这些后,您可以解析日期字符串。

然后,确定日期是今天还是明天(忽略时间)的正确方法是使用Calendar方法isDateInTodayisDateInTomorrow

在这里修改了所有内容的代码:

func dateFormatter(date: String){
    let dateFormatter = DateFormatter()
    // For a string like "2018-06-09T09:20:48"
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) // assume date is GMT+0

    if let date_db = dateFormatter.date(from: date) {
        if Calendar.current.isDateInToday(date_db) {
            print("It is today")
        } else if Calendar.current.isDateInTomorrow(date_db) {
            print("It is tomorrow")
        } else {
            print("After Some Days")
        }
    } else {
        print("Unexpected date string")
    }
}