关于日期和时间有很多问题,但我的问题有点不同。
为什么要NSDate
加上时间呢?时间为什么不能去掉NSDate
?我可以删除时间但它需要保存在String中,为什么不允许保存它NSDate
?
关于日期和时间有很多问题,但我的问题有点不同。
为什么要NSDate
加上时间呢?时间为什么不能去掉NSDate
?我可以删除时间但它需要保存在String中,为什么不允许保存它NSDate
?
NSDate
实际上存储了从参考日期(2001 年 1 月 1 日)开始的秒数。剩下的一切都是基于这个秒数的日历计算。如果您截断时间组件并将结果存储为“NSDate”,您将在不同的时区拥有不同的日期。
您应该考虑使用NSDateFormatter
将NSDate
值转换为字符串。利用:
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
设置日期格式化程序以忽略时间。
这是你要找的吗?
func dayOf(date: NSDate) -> NSDate {
return NSCalendar.currentCalendar().dateBySettingHour(0, minute: 0, second: 0, ofDate: date, options: NSCalendarOptions())!
}
快速解决这个问题的一种可重用方法是在 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)!
}
}
这不可能从 NSDate 中删除 TimeStamp。NSDate 总是包含时间戳。
NSDate 基于 UTC 时区。如果在美国是凌晨 1 点,那么在其他国家/地区将是下午 12:30,并且日期会有所不同。如果有不同的日期,那么在何时输入谁将变得很麻烦。因此,要使日期一致,需要时间戳。
编辑:
Zaph 建议的 UTC 更新 :) Daij-Djan 建议的 tiemstamp
NSDate 是一种时间戳的表示方式,你可以在同一个 NSDate 对象的不同时区得到不同的日期,所以你不能只保存 NSDate 对象的“日期”部分,这不是 NSDate 的工作方式。
如果您不希望日期字符串中出现时间,只需在没有时间的情况下对其进行格式化。
我的建议是在您的数据库中保存时间戳,如果您需要查找某个日期,请使用范围查询,这样您就可以处理时区问题。
使用日期字段很难实现时区功能。