2012-03-01 9 views
0

私はこれを約1時間試してきましたが、正しく動作していないようです。Android:日付欄の時間帯を変更

私は基本的にデータベースから日付文字列を読み込みます。yyyy-MM-dd HH:mm:ssという形式です(2012-03-01 14:32:00)。

私が持っているのは文字列です。タイムゾーン情報はありません。この時間は私たちのサーバー上で作成され、最終的にデバイスデータベースに入ります。私はそれが東部標準時であることを知っています。

だから私は基本的に次のコードを試してみました:

SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     sourceFormat.setTimeZone(TimeZone.getTimeZone("EST")); 

     Date parsed = sourceFormat.parse("2012-03-01 10:18:14"); 

     TimeZone tz = TimeZone.getDefault(); 
     SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     destFormat.setTimeZone(tz); 

     String result = destFormat.format(parsed); 

     Log.v("TZ", result); 

を私のエミュレータでは、私は時間を記録するときので、それが正しいとされ、2012年3月1日10時18分14秒を示したESTです。

sourceFormatのタイムゾーンをAmerica/Los Angelesと変更すると、2012-03-01 05:18:14の出力が得られます。

私は専門家ではありませんが、私はロサンゼルスがモントリオール(オフィスがあるEST)の3時間遅れていると確信しています。だから私は時間がかかる場合2012-03-01 10:18:14とそれをアメリカ/ロサンゼルスの時間と呼んで、それをESTに変換して、私は見たいと思う2012-03-01 13:18:14。

何が起こっているか

ご協力いただければ幸いです。

ありがとうございます。

+0

実際のデバイスでテストできますか?ときどきエミュレータは破滅した。 – yorkw

+0

はい私はデバイスでテストすることができます、私は明日に入るとすぐに試してみます。エミュレータは常に本物のように動作するとは限りませんが、デスクトップ上にあるように現在の時刻が表示されることを理解しています。 – PaulG

答えて

0

まだ解決していない場合は、複数のタイムゾーンで同じ略語がよく使用されるため、3文字のタイムゾーンID(あなたの場合は "EST"など)の使用はJDK 1.2から廃止されました(たとえば、「CST」は米国の「中央標準時」および「中国標準時」になります)、Javaプラットフォームではそのうちの1つしか認識できません。したがって、sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));を提供しても、コードのタイムゾーンはGMTにデフォルト設定されています。 sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));

またはRFC 822タイムゾーン形式:sourceFormat.setTimeZone(TimeZone.getTimeZone("-05"));
一般的なタイムゾーンフォーマット -

はこれを避けるために、あなたが3文字のゾーンIDを交換してみて。

関連する問題