Ios 如何计算从带有时区的日期起经过的时间?
我从服务器获取具有以下格式的日期:Ios 如何计算从带有时区的日期起经过的时间?,ios,swift,swift2,nsdate,Ios,Swift,Swift2,Nsdate,我从服务器获取具有以下格式的日期: 2016-05-27 17:33:43+0400 现在,我想检测一下,从那个日期到现在已经过去了多少时间?例如1天5小时10分钟20秒 我怎么做?我知道如何从时间戳计算,但不知道如何将其转换为时间戳 有人能帮我吗 例如: 将此2016-05-27 17:33:43+0400转换为1464370423 或者也许还有另一种解决办法。我只想计算一下从那以后经过了多少时间我建议这可以帮助您: 您可以获取当前时间,并使用服务器时间和您的当前时间计算差值 let dat
2016-05-27 17:33:43+0400
现在,我想检测一下,从那个日期到现在已经过去了多少时间?例如1天5小时10分钟20秒
我怎么做?我知道如何从时间戳计算,但不知道如何将其转换为时间戳
有人能帮我吗
例如:
将此2016-05-27 17:33:43+0400
转换为1464370423
或者也许还有另一种解决办法。我只想计算一下从那以后经过了多少时间我建议这可以帮助您: 您可以获取当前时间,并使用服务器时间和您的当前时间计算差值
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
let hour = components.hour
let minutes = components.minute
希望有帮助。您可以使用NSDateComponents格式化程序获取两个日期之间的相对时间。关于日期字符串格式,时区部分需要使用
xx
let dateStr = "2016-05-27 17:33:43+0400"
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ssxx"
formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601)
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let date = formatter.dateFromString(dateStr) {
print(date) // "2016-05-27 13:33:00 +0000\n" -4hs
let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [.Day,.Hour,.Minute,.Second]
dateComponentsFormatter.unitsStyle = .Full
print(dateComponentsFormatter.stringFromDate(date, toDate: NSDate()) ?? "") // 6 days, 17 hours, 51 minutes, 29 seconds
}
给定输入字符串,您可以使用以下命令将其转换为日期,然后再转换为当前时间的
NSTimeInterval
let inputDate = "2016-05-27 17:33:43+0400"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZZZZZ"
if let aDate = dateFormatter.dateFromString(inputDate) {
let timeInterval = aDate.timeIntervalSinceNow
let dateComponentsFormatter = NSDateComponentsFormatter()
if let dateString = dateComponentsFormatter.stringFromTimeInterval(abs(timeInterval)) {
print ("Elapsed time=\(dateString)")
}
}
输出:
运行时间=6d17:51:52
您可以使用aDate.timeIntervalSince1970
将日期作为问题的时间戳
“多少次?”
从一件事以后就过去了
let date = Date()
let howManyTimePassed = date.timeIntervalSinceNow
TimeInterval
是double
的typealias
,意思是说double
的另一种方式。时间间隔的值表示秒。在Swift 5.1中尝试此课程:
open class MyDateClass: NSObject {
private var result:MyDateTime!
init(dateStr: String, inputFormat: String) {
let formatter = DateFormatter()
formatter.dateFormat = inputFormat //"yyyy-MM-dd HH:mm:ss"
formatter.calendar = Calendar(identifier: .gregorian)
formatter.locale = Locale(identifier: "en_US_POSIX")
if let date = formatter.date(from: dateStr) {
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [.year,.month,.day,.hour,.minute,.second]
dateComponentsFormatter.unitsStyle = .full
let strFromat = dateComponentsFormatter.string(from: date, to: Date()) ?? ""
var trimmedString = strFromat.replacingOccurrences(of: " ", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "years", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "months", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "days", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "hours", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "minutes", with: "")
trimmedString = trimmedString.replacingOccurrences(of: "seconds", with: "")
let arr = trimmedString.split(separator: ",")
let result = MyDateTime(year: Int(arr[0]), month: Int(arr[1]), day: Int(arr[2]), hour: Int(arr[3]), minute: Int(arr[4]), second: Int(arr[5]))
self.result = result
}
}
func getDateTime() -> MyDateTime {
return result
}
}
public struct MyDateTime {
var year:Int?
var month:Int?
var day:Int?
var hour:Int?
var minute:Int?
var second:Int?
}
这门课的工作原理如下:
let myClass = MyDateClass(dateStr: "2016-05-27 17:33:43", inputFormat: "yyyy-MM-dd HH:mm:ss")
let time = myClass.getDateTime()
现在你可以随心所欲地显示时间了。你说的“转换为时间戳”是什么意思?你能显示你想要的输出和到目前为止你拥有的吗?@Paulw11我编辑了我的问题并添加了以下内容:例如,将这个2016-05-27 17:33:43+0400
转换为1464370423
,或者可能有另一个解决方案。我只想计算从那以后经过了多少时间(多少天、小时、分钟、秒)看看NSDateFormatter,它允许您将NSDate转换为字符串格式。一旦你有了一个NSDate,你似乎在寻找什么是1464370423
?@Paulw11 timestampter似乎NSDateFormatter非常宽容。它与zzzzzzzz或xx一起工作