4

关于日期和时间有很多问题,但我的问题有点不同。

为什么要NSDate加上时间呢?时间为什么不能去掉NSDate?我可以删除时间但它需要保存在String中,为什么不允许保存它NSDate

4

5 回答 5

3

NSDate实际上存储了从参考日期(2001 年 1 月 1 日)开始的秒数。剩下的一切都是基于这个秒数的日历计算。如果您截断时间组件并将结果存储为“NSDate”,您将在不同的时区拥有不同的日期。

您应该考虑使用NSDateFormatterNSDate值转换为字符串。利用:

[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];

设置日期格式化程序以忽略时间。

于 2012-12-13T14:17:41.557 回答
2

这是你要找的吗?

func dayOf(date: NSDate) -> NSDate {
    return NSCalendar.currentCalendar().dateBySettingHour(0, minute: 0, second: 0, ofDate: date, options: NSCalendarOptions())!
}
于 2015-12-15T06:55:50.873 回答
2

快速解决这个问题的一种可重用方法是在 NSDate 上编写一个扩展来修剪对象的时间。

import Foundation

extension NSDate {
  func trimTime() -> NSDate {
      let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
      let components = cal.components([.Day, .Month, .Year], fromDate: self)
      return cal.dateFromComponents(components)!
  }
}
于 2016-01-20T04:34:10.247 回答
1

这不可能从 NSDate 中删除 TimeStamp。NSDate 总是包含时间戳。

NSDate 基于 UTC 时区。如果在美国是凌晨 1 点,那么在其他国家/地区将是下午 12:30,并且日期会有所不同。如果有不同的日期,那么在何时输入谁将变得很麻烦。因此,要使日期一致,需要时间戳。

编辑:

Zaph 建议的 UTC 更新 :) Daij-Djan 建议的 tiemstamp

于 2012-12-13T14:07:28.023 回答
1

NSDate 是一种时间戳的表示方式,你可以在同一个 NSDate 对象的不同时区得到不同的日期,所以你不能只保存 NSDate 对象的“日期”部分,这不是 NSDate 的工作方式。

如果您不希望日期字符串中出现时间,只需在没有时间的情况下对其进行格式化。

我的建议是在您的数据库中保存时间戳,如果您需要查找某个日期,请使用范围查询,这样您就可以处理时区问题。

使用日期字段很难实现时区功能。

于 2012-12-13T14:19:03.987 回答