将时间戳转换为时间会给出错误的时间

时间:2014-07-01 02:52:30

标签: java android simpledateformat unix-timestamp

我不知道我在这里做错了什么。我有一个时间戳(长),并试图将其更改为可读格式。

这是时间戳: 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);

我该如何解决这个问题?

2 个答案:

答案 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位数。