繁体   English   中英

如何在 swift 中仅获取日期的时间

[英]How to get only time from date in swift

这个问题不是第一次被问到,但没有解决方案对我有用。 我从 Api 响应中获取时间字符串,格式为“14:45”。 我想将这个时间与当前时间进行比较,为此我需要在 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!

}

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

func changeFormat(str:String) -> String {

请注意,您不应该在这里 output a Date ,因为Date s没有格式 它们将始终以相同的方式打印。 您需要在此方法中做两件事:

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

  • 格式化您刚刚使用DateFormatter获得的Date object ,指定格式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
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM