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