【问题标题】:In Swift, how to delete hours in a Date object?在 Swift 中,如何删除 Date 对象中的小时数?
【发布时间】:2020-09-03 10:47:55
【问题描述】:

我需要使用日期字典,并且我需要删除有关日期的所有信息,除了: 天 月 年份

我创建了这个静态函数:

let day = Date() // it's an example
print(day)

func dateSimplificator(WithDate date: Date) -> Date {
    let formatterD = DateFormatter()
    formatterD.dateFormat = "dd MM yyyy"
    let dayString = formatterD.string(from: date)
    let reFormatterD = DateFormatter()
    reFormatterD.dateFormat = "dd MM yyyy"
    let dayFormatted = reFormatterD.date(from: dayString)!
    //print(dayFormatted)
    return dayFormatted
}

print(dateSimplificator(WithDate: day))

当我打印时,我得到: 2020-09-03 10:40:25 +0000 2020-09-02 23:00:00 +0000

这不是我想要的。 我需要这样的东西:

日期 => 2020-09-03 10:40:25 +0000 当我使用带有日期的静态函数时,我必须获得这样的新日期: 2020-09-02 00:00:00 +0000

我的功能应该改变什么?

【问题讨论】:

  • 最好的解决方案是始终使用相同的时间,例如通过let startOfDay = Calendar.current.startOfDay(for: day)
  • 但它会创建一个小时数不为 00 的时间!并且需要除日月和年之外的日期都为零
  • 那是因为时区,重要的是所有日期都得到相同的时间。
  • @Wahib 对于时间不敏感的日期,您应该使用中午而不是午夜。并非所有日期都从凌晨 12 点开始stackoverflow.com/questions/44009804/…

标签: swift date formatter


【解决方案1】:

首先你的方法可以在没有日期格式化程序的情况下编写

func dateSimplificator(with date: Date) -> Date {
    return Calendar.current.startOfDay(for: date)
}

日期格式化程序首先考虑本地时区——在你的情况下显然是 UTC+0100——但print 以 UTC 显示日期。 2020-09-03 00:00:00 +01002020-09-02 23:00:00 +0000 是同一时刻。

【讨论】:

  • 我在同一时间同意你的看法。但是我的函数需要使用除今天以外的其他日期,所以我不能使用你的提议
  • startOfDay(for: 返回任何日期的正确值,即使是夏令时在午夜发生变化的区域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多