ユーザーがログインして別のタイムゾーンにある可能性のあるサイトを選択できるアプリを開発中です。アプリはそのサイトに関連するデータを表示しているため、NSTimeZone.setDefaultTimeZone経由でサイトタイムゾーンに設定することがアプリのデフォルトのタイムゾーンに設定されています。これは、私がFMDB(私はそれと何か関係がないと思う)と 'localtime'でstrftimeを使用してsqlite dbからデータを選択する場合を除いて素晴らしいです。私たちのデータは、エポックを使用して分単位でUTCで保存されますが、現地の時間帯で曜日、曜日、月ごとに集計を表示する必要があります。例えば、平日で平均値を取得するには:アプリのデフォルトタイムゾーンが設定されていても、システムタイムゾーンを使用しているiOSの日付機能のSQLite
select strftime('%w',datetime(epoch,'localtime')),avg(value)
from values
where siteId = 'x'
group by 1
order by 2 desc
それが使っていることを「localtimeのは、」システムの現地時間ではなく、すべてのNSDateコールはデフォルトのタイムゾーンを尊重アプリのデフォルトのタイムゾーンです。 localtimeとUTC以外のstrftimeの他のタイムゾーンオプションは存在しません。現在の回避策は、上記のように1つのクエリで簡単に処理できる複数のSQLラウンドトリップを必要とします。
iOS上のsqliteが 'localtime'をどのように決定するか教えてください。別のつまりdefaultTimeZoneを使用するように強制する方法はありますか?
デビッド、そのよう十分に文書回答のおかげでそれはまだ、年間2日間は24時間ではないとオフセットこれらの境界を通過するときのために同じではありません夏時間の問題を解決していません!開始日と終了日。私はまだそれを処理する必要がありますNSDateから開始日と終了日を取得していますが、計算されたオフセットを使用することは、ほとんどの場合、最適な解決策となります。 – skymatt70