gpt4 book ai didi

ios - 与当前时间的差异 - 使用 String 而不是 dateWithEra

转载 作者:行者123 更新时间:2023-11-29 01:23:24 24 4
gpt4 key购买 nike

我的created_at位于字符串中(格式为2015-12-16 19:28:16)。我想将它与当前时间进行比较,并以 5h35m3d 等形式给出时差...

我在 SO answer 上找到了我可以使用扩展来实现这一点。这是扩展名:

extension NSDate {
func yearsFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Year, fromDate: date, toDate: self, options: []).year
}
func monthsFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Month, fromDate: date, toDate: self, options: []).month
}
func weeksFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.WeekOfYear, fromDate: date, toDate: self, options: []).weekOfYear
}
func daysFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Day, fromDate: date, toDate: self, options: []).day
}
func hoursFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Hour, fromDate: date, toDate: self, options: []).hour
}
func minutesFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Minute, fromDate: date, toDate: self, options: []).minute
}
func secondsFrom(date:NSDate) -> Int{
return NSCalendar.currentCalendar().components(.Second, fromDate: date, toDate: self, options: []).second
}
func offsetFrom(date:NSDate) -> String {
if yearsFrom(date) > 0 { return "\(yearsFrom(date))y" }
if monthsFrom(date) > 0 { return "\(monthsFrom(date))M" }
if weeksFrom(date) > 0 { return "\(weeksFrom(date))w" }
if daysFrom(date) > 0 { return "\(daysFrom(date))d" }
if hoursFrom(date) > 0 { return "\(hoursFrom(date))h" }
if minutesFrom(date) > 0 { return "\(minutesFrom(date))m" }
if secondsFrom(date) > 0 { return "\(secondsFrom(date))s" }
return ""
}
}

所以我可以使用 dateWithEra() 并调用 offsetFrom():

let date4 = NSCalendar.currentCalendar().dateWithEra(1, year: 2015, month: 11, day: 28, hour: 5, minute: 9, second: 0, nanosecond: 0)!

let timeOffset3 = NSDate().offsetFrom(date3) // "54m"

但是,我想给它一个字符串中的日期。

let myDate = post!["created_at"].string! // 2015-12-16 19:28:16

我怎样才能给它一个能够转换 3h, 30m 的字符串?我想我可以利用这个字符串并将它放在 dateWithEra 中,但是有没有办法直接给它一个字符串?


还是我完全脱离了轨道?我想要实现的是获取字符串中的日期(格式为 2015-12-16 19:28:16)与当前时间之间的时差,并将其显示为 "5h"“50m”

最佳答案

要从格式化字符串中获取 NSDate,请使用 NSDateFormatter

let dateString = "2015-12-16 19:28:16"
let inputFormatter = NSDateFormatter()
inputFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss"
let date = inputFormatter.dateFromString(dateString)!

如果您可以使用 min 而不是 m 来表示某些本地化的分钟缩写,最简单的方法是 NSDateComponentsFormatter

let outputformatter = NSDateComponentsFormatter()
outputformatter.allowedUnits = [.Day, .Hour, .Minute, .Second]
outputformatter.unitsStyle = .Abbreviated
let timeOffset = outputformatter.stringFromDate(date, toDate: NSDate())!

编辑:

要始终获得 m 而不是 min,请使 timeOffset 可变并添加

var timeOffset = outputformatter.stringFromDate(date, toDate: NSDate())!
if let minRange = timeOffset.rangeOfString("in") {
timeOffset = timeOffset.substringToIndex(minRange.startIndex) + timeOffset.substringFromIndex(minRange.endIndex)
}

关于ios - 与当前时间的差异 - 使用 String 而不是 dateWithEra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com