1

我只需要关于 java 中 DateTime 格式的一点帮助。我正在编写一个基于 yahoo messanger 的简单聊天应用程序,在其中我将读取 yahoo messanger 的数据包并显示聊天消息。现在我想显示从给定标题。在一篇特定的文章中,据说“时间戳”将为 0x477BBA61(十进制 1199290977),这意味着“Wed, 2 Jan 2008 16:22:57 GMT ”。我试图揭示该小数如何转换为该特定日期。我尝试编写一个简单的 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 才能获得自纪元以来的毫秒数。

您还使用Calendar.HOUR哪个是 12 小时制而不是Calendar.HOUR_OF_DAY哪个是 24 小时制。这段代码:

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

恕我直言,您需要知道:

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 回答
0

时区可能以秒为单位;尝试将该值乘以 1000 以获得Calendar预期的毫秒数。

于 2011-04-14T09:07:53.503 回答
-2

您需要使用SimpleDateFormat - 查看文档,它很容易理解,而且它包含很多示例(因此您无需搜索“日期格式教程”或类似的东西 :))

编辑:哎呀,我错过了你以秒而不是毫秒为单位传递时间的部分,结果时间是错误的,我误解了你的问题并认为你只想解析时间,乔恩的答案更好:)

于 2011-04-14T08:43:10.833 回答