java将long转换为格式化字符串(不到一小时)

时间:2013-11-12 05:18:08

标签: java time long-integer

251786< - > 00:04:11786

Date date = new Date(251786);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss,SSS");
String dateFormatted = formatter.format(date);

但是,dateFormatted的值是18:04:11,786

HH会怎样?

4 个答案:

答案 0 :(得分:1)

您对Date构造函数(251786)的参数表示自纪元(或1970年1月1日00:00:00 GMT)以来近252秒。假设你的机器没有在格林威治标准时间运行,那你就得到了当地的时间偏差 - 或1970年1月1日00:04:11,786格林威治标准时间 - 而且我猜你在GMT-6 (即你的时区比格林尼治标准时间晚了6个小时,所以你在小时字段中得到18个 - 或者下午6点)。

答案 1 :(得分:0)

http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date(long)

  

日期(长日期)             分配一个Date对象并对其进行初始化,以表示自标准基准时间(即“epoch”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。

答案 2 :(得分:0)

我同意@Elliott,除此之外还有更多解释:)。

当您使用GMT-6(比GMT低6小时)时,标准the epoch将被视为January 1, 1970, 18:00:00而不是January 1, 1970, 00:00:00 GMT

然后,传递给251786构造函数的参数(Date)将被添加到the epoch。在您的情况下,它将是January 1, 1970, 18:00:00 000 + 251786 - >你看到的结果将是 January 1, 1970, 18:04:11 786

您可以通过模式EEE, d MMM yyyy hh:mm:ss,SSS或其他模式尝试来理解它。

Date date = new Date(251786);
DateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy hh:mm:ss,SSS");
String dateFormatted = formatter.format(date);

答案 3 :(得分:-1)

它绝对是4分11秒,这就是它的表现。

您的毫秒参数需要增加以获得数小时。