日時についてはたくさんの質問がありますが、私の質問は少し違います。
なぜ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の動作方法ではありません。
日付文字列に時間を表示したくない場合は、時間を使わずにフォーマットしてください。
私の提案は、データベースにタイムスタンプを保存することです。特定の日付を見つける必要がある場合は、範囲クエリを使用してください。そうすれば、タイムゾーンの問題に対処できます。
タイムゾーン関数は、日付フィールドでは実装が困難です。