1

Java の DateTime 形式に関する小さなヘルプが必要です。yahoo メッセンジャーに基づいて単純なチャット アプリケーションを作成しています。このアプリケーションでは、yahoo メッセンジャーのパケットを読み取り、チャット メッセージを表示します。特定の記事では、「タイムスタンプ」は 0x477BBA61 (10 進数の 1199290977) になると言われています。これは、「2008 年 1 月 2 日水曜日 16:22:57 GMT」を意味します。その10進数がその特定の日付にどのように変換されるかを明らかにしようとしています.私はそれを変換するための簡単なJavaアプリケーションを作成しようとしました.

  public static void main(String[] arg)
        {
             Calendar  obj = Calendar.getInstance();
          obj.setTimeZone(TimeZone.getTimeZone("GMT"));
            obj.setTimeInMillis(1199290977l);
          System.out.println( obj.get(Calendar.HOUR)+":"+obj.get(Calendar.MINUTE));
        }

output:9:8

誰でもこれで私を助けることができますか?

4

4 に答える 4

4

1199290977L の値が間違っています。これは、Unix エポック (UTC 1970 年 1 月 1 日の真夜中) からの秒単位で測定されます。エポックからのミリ秒を取得するには、1000 を掛ける必要があります。

また、24 時間制ではCalendar.HOURなく 12 時間制を使用しています。Calendar.HOUR_OF_DAYこのコード:

Calendar  obj = Calendar.getInstance();
obj.setTimeZone(TimeZone.getTimeZone("GMT"));
obj.setTimeInMillis(1199290977000L);
System.out.println(obj.get(Calendar.HOUR_OF_DAY) + ":" + 
                   obj.get(Calendar.MINUTE));

... 16:22 と表示されます。

ただし、java.text.DateTimeFormatこれを自分で行うのではなく、間違いなくクラスを使用する必要があります。または、理想的には、代わりにJoda Timeを使用してください。

于 2011-04-14T08:48:03.227 に答える
0

タイムゾーンはおそらく秒単位です。値に1000を掛けて、Calendar期待するミリ秒を取得してみてください。

于 2011-04-14T09:07:53.503 に答える
0

続行するには、次のことを知っておく必要があります。

whether or not that number is milliseconds or not
what is the starting point (in java is  January 1, 1970, 00:00:00 GMT)
于 2011-04-14T08:50:46.650 に答える
-2

SimpleDateFormatを使用する必要があります-ドキュメントを見ると、非常に理解しやすく、さらに多くの例が含まれています(したがって、「日付形式のチュートリアル」などを検索する必要はありません:))

編集:おっと、ミリ秒ではなく秒単位で時間を渡していて、結果の時間が間違っている部分を見逃しました。あなたの質問を誤解して、時間を解析したいと思ったのですが、ジョンの答えの方が良いです:)

于 2011-04-14T08:43:10.833 に答える