4

日時についてはたくさんの質問がありますが、私の質問は少し違います。

なぜNSDate時間が追加されるのですか?なぜ時間を削除できないのNSDateですか?時間を削除することはできますが、文字列で保存する必要があります。なぜ保存できないのNSDateですか?

4

5 に答える 5

3

NSDate実際には、参照日(2001年1月1日)からの秒数を格納します。残りはすべて、この秒数に基づくカレンダー計算です。時間コンポーネントを切り捨てて結果を「NSDate」として保存すると、異なるタイムゾーンで異なる日付になります。

を使用して値を文字列NSDateFormatterに変換することを検討する必要があります。NSDate使用する:

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

時間を無視するように日付フォーマッタを設定します。

于 2012-12-13T14:17:41.557 に答える
2

これはあなたが探していたものですか?

func dayOf(date: NSDate) -> NSDate {
    return NSCalendar.currentCalendar().dateBySettingHour(0, minute: 0, second: 0, ofDate: date, options: NSCalendarOptions())!
}
于 2015-12-15T06:55:50.873 に答える
2

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)!
  }
}
于 2016-01-20T04:34:10.247 に答える
1

これは、NSDateからTimeStampを削除することはできません。NSDateには常にタイムスタンプが含まれています。

NSDateは、UTCタイムゾーンに基づいています。米国で午前1時の場合、他の国では午後12時30分になり、日付は異なります。日付が違うと誰が入ったのかわからなくなる。したがって、日付を一貫性のあるタイムスタンプにするには、ingが必要です。

編集:

Zaphによって提案されたUTC更新:)Daij-Djanによって提案されたtiemstamp

于 2012-12-13T14:07:28.023 に答える
1

NSDateはタイムスタンプの表示方法であり、同じNSDateオブジェクトの異なるタイムゾーンで異なる日付を取得できるため、NSDateオブジェクトの「日付」部分を保存することはできません。これはNSDateの動作方法ではありません。

日付文字列に時間を表示したくない場合は、時間を使わずにフォーマットしてください。

私の提案は、データベースにタイムスタンプを保存することです。特定の日付を見つける必要がある場合は、範囲クエリを使用してください。そうすれば、タイムゾーンの問題に対処できます。

タイムゾーン関数は、日付フィールドでは実装が困難です。

于 2012-12-13T14:19:03.987 に答える