Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 时间戳格式加17小时_Java_Time_Timestamp - Fatal编程技术网

Java 时间戳格式加17小时

Java 时间戳格式加17小时,java,time,timestamp,Java,Time,Timestamp,问题在于simpleDataFormat似乎在实际时间戳上增加了17个小时 这应该很简单。我不确定我做错了什么。我有一个方法,可以将长纳秒转换为格式化的时间戳。增加了17个小时。这是我的 输出:17:00:00:234 我在山区标准时间你的机器在哪个时区?它可能进行时区转换吗 如果是这样,使用Java TimeZone类可能会有所帮助:您的机器在哪个时区?它可能进行时区转换吗 如果是这样,使用Java TimeZone类可能会有所帮助:您必须将时区设置为UTC public static voi

问题在于
simpleDataFormat
似乎在实际时间戳上增加了17个小时

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

输出:
17:00:00:234


我在山区标准时间

你的机器在哪个时区?它可能进行时区转换吗


如果是这样,使用Java TimeZone类可能会有所帮助:

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


如果是这样,使用Java TimeZone类可能会有所帮助:

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

默认情况下,
SimpleDataFormat
将时间戳转换为当前时区中的时间。因此,有必要告诉它假定为UTC。否则,您可以使用。

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

默认情况下,
SimpleDataFormat
将时间戳转换为当前时区中的时间。因此,有必要告诉它假定为UTC。否则,您可以使用。

在使用SimpleDataFormat进行格式化时,您正在隐式地将持续时间转换为日期。要半安全地格式化该日期,请在GMT时区中进行格式化,而不使用DST。当遇到+24小时的持续时间时,这仍然会有问题


更好的解决方案是编写Duration类和SimpleDurationFormat类。这是一种痛苦,但你只需要这样做一次。也有其他选择,比如吸入JodaTime,它明确支持持续时间(尽管我从未格式化过持续时间)。

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


更好的解决方案是编写Duration类和SimpleDurationFormat类。这是一种痛苦,但你只需要这样做一次。也有其他选择,比如吸入JodaTime,它明确支持持续时间(尽管我从未格式化过持续时间)。

它是否为您进行时区计算?相对于格林尼治标准时间,你在哪里?我在山区标准时间,而你的SSCCE比大多数人好得多,它真的是没有导入声明的SSCCE吗?并不是每个人都会为短期问题启动IDE。@EdwinBuck说得很好。我会修好的。它在为你做时区计算吗?相对于格林尼治标准时间,你在哪里?我在山区标准时间,而你的SSCCE比大多数人好得多,它真的是没有导入声明的SSCCE吗?并不是每个人都会为短期问题启动IDE。@EdwinBuck说得很好。我会修好的。