【问题标题】:What is the best way to compare two times without a date in Swift [closed]在 Swift 中比较没有日期的两次的最佳方法是什么 [关闭]
【发布时间】:2021-02-12 18:58:23
【问题描述】:

我想知道您认为哪个是在没有特定日期的情况下快速比较两个不同时间的最佳方法

目前我一直在考虑以这种方式实现

  static func isClosingTime() -> Bool {
     let currentHour = Calendar.current.component(.hour, from: Date())
     let currentMinute = Calendar.current.component(.minute, from: Date())
     currentHour >= 19 && currentMinute <= 30
  }

我想知道是否有更好的方法

我接受所有关于干净和正确代码的建议

【问题讨论】:

  • 但是您想比较什么以及如何比较?您说两次不同的时间,但在您的代码中,您似乎比较了一次。您要比较的是特定时间还是时间间隔?也许你也可以添加一个单词和数字的例子。
  • 所以在这里我认为存在英语问题,所以我很抱歉,但我正在使用英语翻译,我认为它翻译得不好......我只是重读了我的问题,实际上它不是清楚.. 抱歉,但看起来使用翻译器不是一个好主意.. 我尝试更新我的问题
  • @Joakim Danielson 我希望 isClosingTime 函数在当前时间大于 19:30 时返回“True”值,我想知道我的实现是否良好或者我应该使用其他更好的方法
  • 但这是您要问的正确问题吗?在下面的答案中,如果关闭时间是午夜之后的某个时间,比如 01:00,会发生什么?那么 01:00 到 23:59 之间的所有时间都将在关闭时间之后进行。同样对于 19:30 作为关闭时间,这将不清楚,因为直接在午夜之后,该函数将返回 false,因此 00:01 不在关闭时间之后。
  • 事实上我只是在分析这种可能性.. 所以也许我还应该考虑验证当前时间是否在时间空间内,例如 19:30 - 9:00 或 7pm - 9am。答案中的功能已经在应用程序的其他部分实现了,但当然我也必须考虑你的答案,所以还要计算一个时间间隔

标签: ios swift string date integer


【解决方案1】:

从你的解释看来是你

希望 isClosingTime 函数在当前时间大于 19:30 时返回“True”值

基于此,我可以建议这样做:

  • Date 对象的形式获取关闭时间
  • 将结束时间日期对象与当前时间进行比较

像这样:

func isClosingTime(hour: Int, minute: Int) -> Bool {

    guard let closingTime = Calendar.current.date(bySettingHour: hour, minute: minute, second: 0, of: Date()) else {
        return false // could not establish closing time
    }

    return Date() >= closingTime
}

你叫它

isClosingTime(hour: 19, minute; 30)

我还将更新您需要处理关闭_和_打开时间的案例的答案。

func shouldBeOpen(from opening: (Int, Int), to closing: (Int, Int)) -> Bool {

    guard let openingTime = Calendar.current.date(bySettingHour: opening.0, minute: opening.1, second: 0, of: Date()),
          let closingTime = Calendar.current.date(bySettingHour: closing.0, minute: closing.1, second: 0, of: Date()) else {
        return false // could not establish closing time
    }

    return (openingTime ... closingTime).contains(Date())
}

例如:

shouldBeOpen(from: (9, 0), to: (19, 30))

这里唯一的限制是它可以工作1天,并且关闭时间应该是>开放时间。但即使这样也可以处理。

【讨论】:

  • 是的!谢谢!这似乎好多了
  • 查看我上面的评论,为什么这个解决方案不能真正起作用。
  • @JoakimDanielson 是的,它适用于我回答的问题(阅读答案的顶部)。 IE。如果您想要今天的关闭时间,它会准确地给您。如果你想,除此之外,开放时间,你也可以添加(甚至相同的功能)
  • 好吧,你应该阅读我上面的评论,例如在 00:01,你的方法将返回 false,这有点奇怪。但这并不重要,因为主要问题是问题是错误的。
  • @JoakimDanielson 取决于您如何使用该功能。但是我更新了处理打开和关闭时间的答案,如果那是 OP 要去的地方。是的,它仍然有一个限制,例如,如果您从晚上 11 点到凌晨 3 点打开某些东西,但在这种情况下,您需要获得相同的逻辑,只需将其拆分为 2 个打开/关闭间隔,如果您有休息时间也是如此中午。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 2012-03-07
  • 2021-10-26
  • 2022-01-01
  • 2015-08-21
相关资源
最近更新 更多