[英]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没有格式。 它们将始终以相同的方式打印。 您需要在此方法中做两件事:
使用DateFormatter
将str
解析为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.