java - 时间戳格式添加 17 小时

标签 java time timestamp

问题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

我现在是山区标准时间

最佳答案

您必须将时区设置为 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 .

关于java - 时间戳格式添加 17 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10853594/

相关文章:

java - 在 Maven 构建时替换测试属性值

c++ - 将 float 存储为 short int。令人困惑的结果

php - 预订系统日期

mysql - SQL 基于时间戳差异计算ON Multi table with multi condition - MySQL

java - 列出 jar 文件中的类

java - 具有来自不同服务器的存储库的联合存储

java - Java 中使用 double 保持精度

Java 8 DateTimeFormatter 可选部分不带秒

javascript - 如何用foreach时间制作图表

Javascript 比较时间戳