Eliminar el time del object NSDate y savelo en NSDate no en cadena?

Hay muchas preguntas sobre la date y la hora, pero mi pregunta es un poco diferente.

¿Por qué NSDate viene con times agregados? ¿Por qué no se puede eliminar el time de NSDate ? Puedo eliminar el time, pero debe savese en String, ¿Por qué no está permitido savelo en NSDate ?

Esto no es posible eliminar TimeStamp de NSDate. NSDate siempre está lleno de timestamp.

NSDate se basa en la zona horaria UTC. Si es la 1AM en EE. UU., Será a las 12:30 PM en algún otro país y la date será diferente. Será un problema para get quién ingresó si hay dates diferentes. Por lo tanto, para que se establezca la date, se requiere una date y hora constantes.

EDITAR:

Actualización de UTC como sugirió Zaph 🙂 tiemstamp según lo sugerido por Daij-Djan

NSDate almacena realmente un número de segundos a partir de la date de reference (1 de enero de 2001). Todo lo demás son cálculos de calendar basados ​​en esta cantidad de segundos. Si trunca los componentes de time y almacena el resultado como 'NSDate', tendrá diferentes dates en diferentes zonas horarias.

Debería considerar utilizar NSDateFormatter para convertir los valores de NSDate en cadena. Utilizar:

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

para configurar el formateador de la date para ignorar el time.

NSDate es una forma de presentación de sello de time, puede get una date diferente con la zona horaria diferente del mismo object NSDate, por lo que no puede simplemente save la parte "date" del object NSDate, esa no es la forma en que NSDate funciona.

Si no desea que el time presente en la cadena de date, simplemente formatéelo sin time.

Mi sugerencia es ahorrar timestamp en su database, si necesita encontrar cierta date, utilice una consulta de range, de esa manera puede tratar con el problema de zona horaria.

La function de zona horaria es difícil de implementar con el campo de date.

Esto es lo que estabas buscando?

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

Una forma reutilizable de resolver este problema de forma rápida es escribir una extensión en NSDate para recortar el time libre del object.

 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)! } }