Fmdbで日付を扱う場合の注意点
Upcoming SlideShare
Loading in...5
×
 

Fmdbで日付を扱う場合の注意点

on

  • 1,923 views

 

Statistics

Views

Total Views
1,923
Views on SlideShare
1,923
Embed Views
0

Actions

Likes
2
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Fmdbで日付を扱う場合の注意点 Fmdbで日付を扱う場合の注意点 Presentation Transcript

    • FMDBで日付を扱う場 合の注意点 13年7月20日土曜日
    • @gorou_178 Java屋だけどiPhoneアプリに興味 があり自作中。Web系の勉強会などに参加 13年7月20日土曜日
    • もくじ • タイムゾーンとは • SQLiteの日付の扱い方 • Objective-Cで日付取得 • 日付の保存/取得方法 • まとめ 13年7月20日土曜日
    • タイムゾーンとは • 各国によって時差がある (表示時刻が異なる) • 世界基準はイギリスのロンドン • イギリスと日本は9時間の時差 • GMTとかUTCと呼ばれる(日本はJST) 13年7月20日土曜日
    • タイムゾーンとは • iPhoneでは「設定」 →「日付と時刻」の時 間帯で設定可能 • 自動設定をオフにする と変更できる 13年7月20日土曜日
    • SQLiteの日付の扱い方 • データ型として日付型がない • 文字列として扱われる • そのためソートが辞書順になる ※ちゃんと日付順にならない 13年7月20日土曜日
    • SQLiteの日付の扱い方 • REAL型(浮動小数点)を利用 • 日付を小数で表現するjulianday関数を利 用 • 数値なので大小でのソートが可能 13年7月20日土曜日
    • SQLiteの日付の扱い方 • juliandayのinsert例 • create table todo(id integer, title text, createDate real); • insert into todo values(1, "タスク", julianday("2013-07-01 10:00:00")); → select結果: 1|タスク|2456474.91666667 13年7月20日土曜日
    • SQLiteの日付の扱い方 • REAL値を日付に変換 - datetime関数利用 • select datetime(createDate) from todo; → 2013-07-01 10:00:00   ※UTCとして表示される • select datetime(createDate,‘localtime’) from todo; → 2013-07-01 19:00:00   ※実行環境のロケール(タイムゾーン)での日付が表示される 13年7月20日土曜日
    • Objective-Cで日付取得 • [NSDate date]で現在時刻を取得 • 環境のタイムゾーンに関係なくGMTで 取得される 13年7月20日土曜日
    • Objective-Cで日付取得 • NSDateFormatでNSDate NSStringの変 換が可能 • ただしバグがあるので注意 13年7月20日土曜日
    • Objective-Cで日付取得 • バグの対処方法 • setLocaleでlocaleをセット • setCalendarでグレゴリオ暦カレンダをセット • setTimezoneでtimezoneをセット • setFormatで大文字のYを使わない • 以下のブログを参考にしました • Technology-Gym | http://tech-gym.com/2012/10/ios/893.html 13年7月20日土曜日
    • 日付の保存/取得方法 • UTC日付でSQLiteにREAL値でinsert • NSDate *date = [NSDate date]; NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale systemLocale]]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]]; [formatter setDateFormat:@”yyyy-MM-dd hh:mm:ss”]; NSString *strDate = [formatter stringFromDate:date]; • NSString *sql = [NSString alloc] initWithFormat:@”insert into todo values(1, ’タスク’, julianday(’%@’));”, strDate]; 13年7月20日土曜日
    • 日付の保存/取得方法 • select時にタイムゾーンの時刻に変換 • select id, title, datetime(createDate,“localtime”) cdate from todo; • datetimeの結果は文字列 • NSDateFormatterのstringToDateでNSDateに変換 ※この時もNSDateFormatterのバグに注意 13年7月20日土曜日
    • まとめ • SQLiteの日付はREAL型を使う • iOSの日付取得はバグに気をつける • 登録はUTC、取得はシステムのロケー ルやタイムゾーンに変換 13年7月20日土曜日
    • ありがとうございました 13年7月20日土曜日