質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1430閲覧

【Android】 カレンダープロバイダを使用したイベント情報の更新と取得で開始時刻が異なる

satotaro

総合スコア8

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/05/22 07:08

編集2020/05/22 10:16

【Android】 カレンダープロバイダを使用したイベント情報の更新と取得で開始時刻が異なる

Androidアプリの開発でGoogleカレンダーの情報を取得、更新する機能を実装したのですが、登録時の開始時刻(Events.DTSTART)と登録後に取得した際の開始時刻が異なってしまっていて原因がわからない状況です。
Googleカレンダーへのアクセスはコンテンツプロバイダーを使用して該当のDBへアクセスして登録・更新を行なっております。
以下が登録と取得で開始時刻が異なった際の具体的な値です。
登録時と取得時のイベントIDは同一のものであることを確認してます。

・Googleカレンダーへの登録時の値
Events.DTSTART 1590591600000(2020/05/28 00:00:00) <-開始時刻
Events.DTEND 1590674400000(2020/05/28 23:00:00)
Events.ALL_DAY 1
Events.EVENT_TIMEZONE “Asia/Tokyo”

・Googleカレンダーに登録時、取得した際の値
Events.DTSTART 1590537600000(2020/05/27 09:00:00) <-開始時刻

追記:
「Events.ALL_DAY」を1で設定(終日扱いで設定)していたのですが、
0に変更して終日扱いではないようにしたところ取得したイベント情報の開始時刻が一致するようになりました。
ただ「Events.ALL_DAY」を1に設定すると15時間ずれる理由がわかっておりません。
またカレンダーの登録は終日扱いで登録したいので「Events.ALL_DAY」を1に設定しても
取得した際の開始時刻が15時間ずれない解決方法を教えていただきたいです。

わかる方いらっしゃいましたらご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

タイムゾーンの考慮が抜けていませんか?
UTC(協定世界時)とJST(日本標準時)には9時間の時差があります。

Events.DTSTART 1590591600000(2020/05/28 00:00:00)

この日時はUTCだと2020/05/27 15:00:00になります。カレンダープロバイダのドキュメントによると、DTSTARTはUTCのミリ秒として扱われるようですので、終日扱いにした場合はUTCの2020/05/27 00:00:00、つまり

Events.DTSTART 1590537600000(2020/05/27 09:00:00)

こちらの日時に設定されてしまうのでしょう。

java.util.Dateだとタイムゾーンの処理をするのがちょっと面倒なので、Java8のDate and Time API(java.time)を利用するのがおすすめです。AndroidではこのAPIをバックポートしたThreeTenABPという有名なライブラリがありますので、採用を検討してみてください。また、Android Studio 4.0以降だと上記APIが標準で利用できるようになるみたいです。参考記事

投稿2020/05/23 02:36

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satotaro

2020/06/04 07:22

ThreeTenABPを使いましたが結果は同じでした。 強引な方法で解決しました。 ご回答いただきありがとうとざいました。
kakajika

2020/06/07 13:40

どのようなコードを書かれたのでしょうか? コードを載せていただければアドバイスできると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問