我不知道我在这里做错了什么。我有一个时间戳(长),并试图将其更改为可读格式。
这是时间戳:
1404162530517
当我使用epoch转换器验证时间时,它表示它是下午5:08(正确)
当我尝试使用我的代码解析它时,它会在晚上10:21(错误)
这里的代码不起作用:
long unixSeconds = Long.parseLong(tstamp);
Date date = new Date(unixSeconds*1000L); // *1000 is to convert seconds to milliseconds
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE MMM dd", Locale.ENGLISH);
formattedDate = dateFormat.format(date);
SimpleDateFormat timeFormat = new SimpleDateFormat(
"hh:mma ", Locale.ENGLISH);
timeDate = timeFormat.format(date);
System.out.println(tstamp);
System.out.println(timeDate);
我该如何解决这个问题?
答案 0 :(得分:3)
好的,所以你在EDT的时区。但是,Unix时间戳是从UTC 中的Unix纪元计算的。换句话说,你比UTC晚5个小时,所以时间戳是5个小时,因为它是从UTC的1970年午夜开始计算的。
那你怎么解决这个问题呢?在您的第一个SimpleDateFormat
中,输入时区为UTC。这应该将UTC转换为您的时间(EDT):
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE MMM dd", Locale.ENGLISH);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
formattedDate = dateFormat.format(date);
答案 1 :(得分:0)
您是否尝试过将时间戳除以1000?默认情况下,正确的时间戳只有10位数。