【问题标题】:How to get only time from date in swift如何快速从日期中获取时间
【发布时间】:2020-08-16 04:09:42
【问题描述】:

这个问题不是第一次被问到,但没有任何解决方案适合我。我从以下格式“14:45”的 Api 响应中获取字符串中的时间。 我想将此时间与当前时间进行比较,为此我需要将此字符串转换为 Time formate(swift sports) 转换后我总是得到nil 我尝试了多种方法,但没有一种方法对我有用,其中一种仅供参考,我不知道我在这里缺少什么

感谢您的回复

     func stringToTime(str:String) -> Date{ // 14:45 passed here in str
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "hh:mm a"
        print(str)
        //here time string prints
        let date = dateFormatter.date(from: (str))
        print(date)
        //date is nil here, should be 02:45 pm
        return date!

}

【问题讨论】:

  • 看起来您在格式中指定了上午/下午,但您将其排除在 str 之外

标签: ios swift date timestamp


【解决方案1】:

如果您从 API 获得的时间是 24 小时格式,您可以进行字符串比较

let formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
let currentTime = formatter.string(from: Date())

let compare = currentTime.compare("14:45")

您可能需要为 DateFormatter 设置时区以确保它使用与 API 相同的时区

【讨论】:

    【解决方案2】:

    您似乎想将一种格式的时间字符串转换为另一种格式。您的方法签名应如下所示:

    func changeFormat(str:String) -> String {
    

    注意不要在这里输出Date,因为Dates don't have formats。它们将始终以相同的方式打印。你需要在这个方法中做两件事:

    • 使用DateFormatterstr 解析为Date,指定格式HH:mm。您似乎认为DateFormatter 可以自动处理这种格式。它不能:(

    • 使用DateFormatter 格式化您刚刚获得的Date 对象,指定格式hh:mm a。这会产生一个字符串,而不是日期。

    (您也可以考虑让该方法返回一个Date(然后将其称为parseTime),然后在屏幕上显示日期之前执行第二步。)

    func changeFormat(str:String) -> String {
        let dateFormatter = DateFormatter()
    
        // step 1
        dateFormatter.dateFormat = "HH:mm" // input format
        let date = dateFormatter.date(from: str)!
    
        // step 2
        dateFormatter.dateFormat = "hh:mm a" // output format
        let string = dateFormatter.string(from: date)
        return string
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 2016-02-26
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多