【问题标题】:Timestamp format adding 17 hours时间戳格式加 17 小时
【发布时间】:2012-06-01 15:55:03
【问题描述】:

问题SimpleDateFormat 似乎在实际时间戳上增加了 17 小时。

这应该很简单。我不确定我做错了什么。我有一种方法可以将很长的纳秒转换为格式化的时间戳。它增加了17个小时。这是我的SSCCE

package playground;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;

/**
*
* @author kentcdodds
*/
public class NanosecondsToString {

  public static void main(String[] args) {
    long nanoseconds = 234236402;
    Timestamp ts = new Timestamp(TimeUnit.MILLISECONDS.convert(nanoseconds, TimeUnit.NANOSECONDS));
    SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss:SSS");
    String formatted = format.format(ts);
    System.out.println(formatted);
  }
}

输出:17:00:00:234

我在山区标准时间

【问题讨论】:

  • 它是否在为您计算时区?您与 GMT 的关系在哪里?
  • 我在山区标准时间
  • 虽然您的 SSCCE 比大多数都好得多,但它真的是没有 import 语句的 SSCCE 吗?不是每个人都会为短期问题启动 IDE。
  • @EdwinBuck 好点。我会解决的。

标签: java time timestamp


【解决方案1】:

您必须将时区设置为UTC

public static void main(String[] args) throws IOException {
              long nanoseconds = 234236402;
              Timestamp ts = new Timestamp(TimeUnit.MILLISECONDS.convert(nanoseconds, TimeUnit.NANOSECONDS));
              SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss:SSS");
              format.setTimeZone(TimeZone.getTimeZone("UTC"));
              String formatted = format.format(ts);
              System.out.println(formatted);
    }

SimpleDateFormat 默认将时间戳转换为您当前时区的时间。所以有必要告诉它假设它是UTC。否则,您可以使用jodatime's interval class

【讨论】:

    【解决方案2】:

    您的机器在哪个时区?是否可能进行时区转换?

    如果是这样,使用 Java TimeZone 类可能会有所帮助:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/TimeZone.html

    【讨论】:

      【解决方案3】:

      在使用 SimpleDateFormat 进行格式化时,您正在隐式地将持续时间转换为日期。要半安全地格式化该日期,请在 GMT 时区进行格式化,无需 DST。遇到 +24 小时持续时间时,这仍然会出现问题。

      更好的解决方案是编写一个 Duration 类和一个 SimpleDurationFormat 类。这很痛苦,但你只需要这样做一次。也有替代方案,比如引入 JodaTime,它明确支持持续时间(尽管我从来没有格式化过)。

      【讨论】:

        猜你喜欢
        • 2013-01-19
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 2016-07-12
        • 2019-02-17
        • 2017-05-23
        相关资源
        最近更新 更多