日時についてはたくさんの質問がありますが、私の質問は少し違います。
なぜNSDate時間が追加されるのですか?なぜ時間を削除できないのNSDateですか?時間を削除することはできますが、文字列で保存する必要があります。なぜ保存できないのNSDateですか?
日時についてはたくさんの質問がありますが、私の質問は少し違います。
なぜNSDate時間が追加されるのですか?なぜ時間を削除できないのNSDateですか?時間を削除することはできますが、文字列で保存する必要があります。なぜ保存できないの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())!
}
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)!
}
}
これは、NSDateからTimeStampを削除することはできません。NSDateには常にタイムスタンプが含まれています。
NSDateは、UTCタイムゾーンに基づいています。米国で午前1時の場合、他の国では午後12時30分になり、日付は異なります。日付が違うと誰が入ったのかわからなくなる。したがって、日付を一貫性のあるタイムスタンプにするには、ingが必要です。
編集:
Zaphによって提案されたUTC更新:)Daij-Djanによって提案されたtiemstamp
NSDateはタイムスタンプの表示方法であり、同じNSDateオブジェクトの異なるタイムゾーンで異なる日付を取得できるため、NSDateオブジェクトの「日付」部分を保存することはできません。これはNSDateの動作方法ではありません。
日付文字列に時間を表示したくない場合は、時間を使わずにフォーマットしてください。
私の提案は、データベースにタイムスタンプを保存することです。特定の日付を見つける必要がある場合は、範囲クエリを使用してください。そうすれば、タイムゾーンの問題に対処できます。
タイムゾーン関数は、日付フィールドでは実装が困難です。