如何获得自某个时间标记以来已经过去了多少分钟
How to get how many minutes have passed since some time mark
我希望我的应用程序能够显示自某个时间标记以来经过了多少时间,例如秒表。我应该使用 NSdate 吗?
我试过使用 NSDate(timeIntervalSinceReferenceDate:_)
作为参数,我想选择 NSDate(timeIntervalSince1970: someTimeStamp)
,这是不允许的。
我也尝试过手动操作,将当前时间的 NSTimeInterval
转换为 Int
,如下所示:
var date = NSDate().timeIntervalSince1970
let time3 = Int(date)
let time4 = Int(someTimeStamp) //NSTimeInterval in Epoch time
let time5 = Double(time3 - time4)
let time6 = NSDate(timeIntervalSinceReferenceDate: time5) //This is what I need
虽然现在我不确定如何正确显示 time6
,我可以手动除以 60 得到分钟数,除以 60 得到小时数,但我很确定必须有更简单的方法显示自 NSTimeInterval
以来经过的时间(如果低于 60 分钟,最好采用 mm
格式,如果高于 60 分钟,则采用 hh:mm
格式)
你可以使用这个:(Objective C)
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSSecondCalendarUnit | NSMinuteCalendarUnit | NSHourCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:apptDt
toDate:deliveredDt options:0];
NSInteger seconds = [components second];
NSInteger minutes = [components minute];
NSInteger hours = [components hour];
Swift:
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let unitFlags:NSCalendarUnit = NSCalendarUnit.Hour.union(NSCalendarUnit.Minute).union(NSCalendarUnit.Second)
let components = gregorian?.components(unitFlags, fromDate: apptDt, toDate:deliveredDt, options: .MatchFirst)
let seconds = components?.second
let minute = components?.minute
let hour = components?.hour
print("Second: \(seconds), Minutes:\(minute), Hour:\(hour)")
只需将开始日期输入 'fromDate' 和 'toDate' 当前日期。
let elapsedTime = NSDate().timeIntervalSinceDate(DateYouWantToPassToGetInterval)
注意 NSDate 后面的 ()。 NSDate() 实例化一个新的 NSDate 对象,然后 timeIntervalSinceDate returns 与 timeAtPress 之间的时间差。这将 return 一个浮点值(从技术上讲,一个 NSTimeInterval)。
如果您希望将其截断为 Int 值,您可以使用:
let duration = Int(elapsedTime)
谢谢@Bhavuk,这是我为 Swift 4
想出的
let now = Date()
let yesterday = Date.init(timeIntervalSinceNow: -86400)
let calendar = Calendar.current
let componentSet: Set = [Calendar.Component.hour, .minute, .second]
let components = calendar.dateComponents(componentSet, from: now, to: yesterday)
let seconds = components.second!
let minutes = components.minute!
let hours = components.hour!
print("Seconds: \(seconds), Minutes:\(minutes), Hours:\(hours)")
我希望我的应用程序能够显示自某个时间标记以来经过了多少时间,例如秒表。我应该使用 NSdate 吗?
我试过使用 NSDate(timeIntervalSinceReferenceDate:_)
作为参数,我想选择 NSDate(timeIntervalSince1970: someTimeStamp)
,这是不允许的。
我也尝试过手动操作,将当前时间的 NSTimeInterval
转换为 Int
,如下所示:
var date = NSDate().timeIntervalSince1970
let time3 = Int(date)
let time4 = Int(someTimeStamp) //NSTimeInterval in Epoch time
let time5 = Double(time3 - time4)
let time6 = NSDate(timeIntervalSinceReferenceDate: time5) //This is what I need
虽然现在我不确定如何正确显示 time6
,我可以手动除以 60 得到分钟数,除以 60 得到小时数,但我很确定必须有更简单的方法显示自 NSTimeInterval
以来经过的时间(如果低于 60 分钟,最好采用 mm
格式,如果高于 60 分钟,则采用 hh:mm
格式)
你可以使用这个:(Objective C)
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSSecondCalendarUnit | NSMinuteCalendarUnit | NSHourCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:apptDt
toDate:deliveredDt options:0];
NSInteger seconds = [components second];
NSInteger minutes = [components minute];
NSInteger hours = [components hour];
Swift:
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let unitFlags:NSCalendarUnit = NSCalendarUnit.Hour.union(NSCalendarUnit.Minute).union(NSCalendarUnit.Second)
let components = gregorian?.components(unitFlags, fromDate: apptDt, toDate:deliveredDt, options: .MatchFirst)
let seconds = components?.second
let minute = components?.minute
let hour = components?.hour
print("Second: \(seconds), Minutes:\(minute), Hour:\(hour)")
只需将开始日期输入 'fromDate' 和 'toDate' 当前日期。
let elapsedTime = NSDate().timeIntervalSinceDate(DateYouWantToPassToGetInterval)
注意 NSDate 后面的 ()。 NSDate() 实例化一个新的 NSDate 对象,然后 timeIntervalSinceDate returns 与 timeAtPress 之间的时间差。这将 return 一个浮点值(从技术上讲,一个 NSTimeInterval)。
如果您希望将其截断为 Int 值,您可以使用:
let duration = Int(elapsedTime)
谢谢@Bhavuk,这是我为 Swift 4
想出的let now = Date()
let yesterday = Date.init(timeIntervalSinceNow: -86400)
let calendar = Calendar.current
let componentSet: Set = [Calendar.Component.hour, .minute, .second]
let components = calendar.dateComponents(componentSet, from: now, to: yesterday)
let seconds = components.second!
let minutes = components.minute!
let hours = components.hour!
print("Seconds: \(seconds), Minutes:\(minutes), Hours:\(hours)")