【问题标题】:How to get accuracy completion days count from input date如何从输入日期获得准确的完成天数
【发布时间】:2019-07-16 00:49:33
【问题描述】:

如何从给定的输入日期获得准确的完成天数

  func floatDifferenceDays() -> Double {
    let current = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let   inputDate : String = "2018-07-15 05:46:12"
    let input = dateFormatter.date(from: inputDate)
    var result = current.timeIntervalSince(input!)
    result = result / 86400
    return result
}

它为零。从 datecomonents.day 到 31 天的循环,然后递增到 Month 和 year。

如何获得不包括年月的循环发生的天数。

如果给定 inputdate 从当前日期起 12 小时后,它应该返回 0.5 天完成

【问题讨论】:

  • DateComponents 不会提供小数天 - 您需要检索小时数,然后除以 24。
  • @Paulw11 我用解决方案更新了我的问题!它的全部需求但需要知道的是有效的方法
  • 除以 86400 不是一个好主意 - 它不考虑夏令时的变化。最好从日期组件中检索小时。
  • @Paulw11 就我而言,夏令时是一个例外!但是与日光相关的未来参考,那么您的观点是绝对正确的。
  • 为什么要把秒数除以86400?除非您想知道自 1970 年 1 月 1 日以来的天数,否则这是没有意义的。

标签: ios swift date nsdateformatter


【解决方案1】:

我建议您使用CalendarDateComponents 来获取两个日期之间的正确经过时间。这将迎合闰年和夏令时的变化。

例如

let current = Date()
let dateFormatter = DateFormatter()
let calendar = Calendar.autoupdatingCurrent
let timezone = TimeZone.autoupdatingCurrent
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let inputDate = "2018-07-15 05:46:12"
if let input = dateFormatter.date(from: inputDate) {
    let components = calendar.dateComponents([.day,.hour], from: input, to: current)
    let days = Float(components.day ?? 0)
    let hours = Float(components.hour ?? 0)
    let elapsed = days + hours/24.0
    print("elapsed time is \(elapsed) days")
}

经过的时间是 366.25 天

请注意,此代码假定输入字符串位于“本地”时区;如果不是,则需要进行适当的更改。

【讨论】:

  • 是的,输入字符串是本地时区,我在下面添加了甚至检查小步舞曲的差异变化和经过的秒数差异值将分配给我的progressView let minutes = Float(components.minute ?? 0) let seconds = Float(components.second ?? 0) elapsed = days + hours/24.0 + minutes/(24 * 60.0) + seconds/(24 * 60.0 * 60.0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多