6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ローカルタイムで色々したい場合は NSCalendar を使用する

Posted at

EKEventstartDate : NSDate などをいじっていると、GMTなのでスケジュールの時間に応じて色々やろうとすると都合が悪い。
調べるとローカル時間を元に処理をしたい倍は NSDate ではなく NSCalendar を使うそう。

let cal = NSCalendar.currentCalendar()
let components = cal.components(
    [.Year, .Month, .Day, .Hour, .Minute], // 処理に必要なものを指定する
    fromDate: startDate)
print("day=\(components.day) hour=\(components.hour)")

上記のやり方なら NSDate を元にローカル時間に変換して返してくれる。

注意点

注意点としては components の各要素 (hourday など)に対して加減算を行った場合、もう一度作り直さないと -5時とか -2日とか存在しない時間になってしまう。

let cal = NSCalendar.currentCalendar()
let components = cal.components(
    [.Day, .Hour], // 処理に必要なものを指定する
    fromDate: NSDate())
print("day=\(components.day) hour=\(components.hour) ") // "day=8 hour=5 \n"
components.hour = components.hour - 10
components.day = components.day - 10
print("day=\(components.day) hour=\(components.hour) ") // "day=-2 hour=-5 \n"

面倒だが作り直せば正常な表示になる。

let newComponents = cal.components( [.Day, .Hour],
    fromDate: cal.dateFromComponents(components)!)

print("day=\(newComponents.day) hour=\(newComponents.hour) ") //"day=28 hour=19 \n"
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?