Objective c 是否从NSDate对象中删除时间并将其保存在NSDate而不是字符串中?

Objective c 是否从NSDate对象中删除时间并将其保存在NSDate而不是字符串中?,objective-c,ios,cocoa-touch,nsdate,nsdateformatter,Objective C,Ios,Cocoa Touch,Nsdate,Nsdateformatter,关于日期和时间有很多问题,但我的问题有点不同 为什么NSDate会添加时间? 为什么不能从NSDate中删除时间?我可以删除时间,但它需要保存在字符串中,为什么不允许将其保存在NSDate中?这不可能从NSDate中删除时间戳。NSDate总是带有时间戳 NSDate基于UTC时区。如果在美国是凌晨1点,在其他一些国家则是下午12:30,日期会有所不同。如果有不同的日期,就很难确定是谁输入的。因此,为了使日期一致,需要时间戳 编辑: Zaph建议的UTC更新:) Daij Djan建议的tiem

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

为什么
NSDate
会添加时间?
为什么不能从
NSDate
中删除时间?我可以删除时间,但它需要保存在字符串中,为什么不允许将其保存在
NSDate
中?

这不可能从NSDate中删除时间戳。NSDate总是带有时间戳

NSDate基于UTC时区。如果在美国是凌晨1点,在其他一些国家则是下午12:30,日期会有所不同。如果有不同的日期,就很难确定是谁输入的。因此,为了使日期一致,需要时间戳

编辑:

Zaph建议的UTC更新:)
Daij Djan建议的tiemstamp实际上存储了自参考日期(2001年1月1日)起的秒数。其余的都是基于秒数的日历计算。如果截断时间组件并将结果存储为“NSDate”,则在不同的时区将有不同的日期

您应该考虑使用<代码> NSDateFormatter <代码>将<代码> NSDATE < /代码>值转换为String。使用:

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

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

NSDate是时间戳的一种表示方式,您可以使用同一NSDate对象的不同时区获得不同的日期,因此您不能只保存NSDate对象的“日期”部分,这不是NSDate的工作方式

如果您不希望时间出现在日期字符串中,只需格式化它而不需要时间

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


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

这就是您要找的吗

func dayOf(date: NSDate) -> NSDate {
    return NSCalendar.currentCalendar().dateBySettingHour(0, minute: 0, second: 0, ofDate: date, options: NSCalendarOptions())!
}

swift中,解决此问题的一种可重用方法是在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)!
  }
}

您想在SQLite或局部变量中存储NSDate的位置?局部NSDate,然后将其传递给json。然后它将存储在oracle数据库中,使用NSDateFormatter按照您想要的格式格式化日期,然后将其存储到NSDate变量,然后传递到数据库。
NSDate
基于UTC时区
NSLog()
显示为计算机时区格式化的日期
NSDateFormatter
允许指定时区。只需添加:NSDate只是一个“整数”的包装器没有专用的时间组件实际上它是双精度包装器:)我担心有人会这么说。我知道它是=>typedef NSTimeInterval double。但是,后面的值始终为零,因为时间戳总是以整秒为单位。顺便说一句,我无法确定为什么使用双精度。Daij Djan:我不能确认
NSDate
只使用整数值
[[NSDate date]timeIntervalSince1970]
返回带小数部分的双值。@MartinR是的,很抱歉。对于亚秒级的精度,它确实很抱歉