1

Android クライアント側で Java を使用し、サーバー側で Python を使用する、開発中の時間ベースのアプリケーションでいくつかの問題が発生しています。Java と Python によって報告された時間で、-3 時間 (Android デバイスの正確なタイムゾーン) の不一致が発生しましたが、両方の側で (SO および他のサイトによると) ) は UTC 時刻を返します。私のクライアントでは、私は使用しています

Date utcNow = new Date()

そしてサーバーでは、私は使用します

datetime.datetime.now()

それでも、同時に実行する2013-09-09 11:52:162013-09-09 14:52:16、それぞれ と が得られます。dateサーバーで実行するとPythonと同じ値が(明らかに)タイムゾーンUTCで返され、Androidデバイスで同じコマンドがBRT(GMT-3)時間を返すため、問題はJava側にあると思われます。

両方の言語でタイムゾーン調整を検索している間、すべての回答は上記の方法が UTC 日付を返すと主張しましたが、この違いははっきりと見えます。

Android デバイスの時刻を UTC に変換するにはどうすればよいですか?

現在、私は本当に醜い(そして非常に非推奨の)ソリューションを使用しています:utcNow.setHours(utcNoe.getHours()+3)

編集:補足: Jon の回答から、Java のDateオブジェクトは Python の単純なオブジェクトと同等であることに気付きましたdatetime

4

2 に答える 2

8

Date問題は、あなたが私たちに示していないコードにあると強く思いStringますSimpleDateFormat.

ADate自体は、時間帯や暦体系が関連付けられていない、ただの瞬間です。文字列に変換するには、両方を適用する必要があります。また、a のデフォルトのタイム ゾーンSimpleDateFormatは、システムのローカル タイム ゾーンです。

コードを次のように変更した場合:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                                               Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateText = format.format(date);

そうすれば、あなたの問題はなくなると思います。これは情報自体の一部ではないことに注意してください。Date(それを理解することは本当に重要です。)

また、Java の日付/時刻 API はかなりひどいものであることに注意してください。代わりにJoda-Timeを使用できる場合は、より良い時間を過ごすことができます。(タイムスタンプだけが必要な場合はやり過ぎですが、実際に日付/時刻の作業を行う必要がある場合は、間違いなく考慮する必要があります。)

于 2013-09-09T15:12:48.843 に答える
1

これは以前に何度も尋ねられました。Set Time Zoneをご覧ください。このアプローチを使用してタイムゾーンを変更することもできます。

--- EDIT タイムゾーンを文字列として送信する場合は、ISO_8601を使用して送信し、サーバーの時間を調整できるようにする必要があります。

于 2013-09-09T15:08:56.790 に答える