17

私はAndroidアプリ用のこのコードでしばらく苦労していて、コツをつかむことができません。私はstackoverflowや他の場所で見つけたすべての解決策を読んで試しましたが、それでも運がありません。

私がやりたいのは、のような文字列"17.08.2012 05:35:19:7600000"をUTC日付に変換する関数と、UTC dateそれを受け取ってそのような文字列に変換する関数です。

String value = "17.08.2012 05:35:19:7600000";
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
try
{
  Date today = df.parse(value);
  System.out.println("Today = " + df.format(today) + " " + today.toGMTString());
} 
catch (ParseException e)
{
  e.printStackTrace();
}

これにより、:が発生しToday = 17.08.2012 07:41:59:0000000 17 Aug 2012 04:41:59 GMTます。どちらも間違っています。

に設定SDF's timezoneしてみましたがUTC、運が悪かったです。
私が気づいたもう一つのこと:私がそうするならば、df.setLenient(false);
それは私に与える:java.text.ParseException: Unparseable date: "17.08.2012 05:35:19:7600000"

誰かが私にいくつかの説明/サンプルコードを提供してくれるなら、私は非常にありがたいです。前もって感謝します

4

4 に答える 4

22

あなたが得ている結果は絶対に正しいです。

これを分析してみましょう:

17.08.2012 05:35:19:7600000
  • 17:月の日(17日)
  • 08:月(8月)
  • 2012年:年(2012)
  • 05:時間帯(午前5時)
  • 35:分(:35)
  • 19:秒の秒(:19)
  • 7600000:ミリ秒(7,600,000)

これで、VMがこれを認識する方法は、時刻を5:35:19 amとして宣言し、それに7,600,000ミリ秒を追加することです。7,600,000ミリ秒=7,600秒=2時間、6分、40秒。5:35:19 am + 02:06:40 = 7:41:59 am(および0ミリ秒)。これはあなたが得ている結果です。(タイムゾーンを適切に設定していないようです。そのため、GMT文字列は結果より3時間遅れています。)

を保持したい場合:7600000、私の知る限り、これは不可能です。これは数秒に簡略化できるため、VMは自動的に他の時間増分に短縮します。ミリ秒(SSSS)は、1000未満の値を格納するためのものである必要があります。

SimpleDateFormat出力用に新しいものを作成することをお勧めします。ただし、ミリ秒は他の時間に吸収されることに注意してください(これらはすべてオブジェクトに単一として格納されるため)longDate

于 2012-08-17T06:25:31.243 に答える
6
    private String convertDate(String cdate)
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
    SimpleDateFormat postFormater = new SimpleDateFormat("yyyy-MM-dd");
    Date convertedDate;
    try
    {
        convertedDate = dateFormat.parse(cdate);
        cdate = postFormater.format(convertedDate);
    }
    catch (ParseException e)
    {
        Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_SHORT).show();
    }
    return cdate;
}

これを試して。

于 2012-08-17T06:22:25.887 に答える