Android 从时间戳获取正确的时间

Android 从时间戳获取正确的时间,android,time,calendar,android-calendar,Android,Time,Calendar,Android Calendar,我收到以下长的1389967092作为时间戳。这应该代表 格林尼治标准时间:2014年1月17日星期五13:58:12格林尼治标准时间 或 我的时区:2014年1月17日下午2:58:12 GMT+1 然而,我在GMT+1中,但我要显示的时间是GMT表示。我正在尝试以下方法: Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(timeStamp); Date date = cal.getTime();

我收到以下长的1389967092作为时间戳。这应该代表

格林尼治标准时间:2014年1月17日星期五13:58:12格林尼治标准时间

我的时区:2014年1月17日下午2:58:12 GMT+1

然而,我在GMT+1中,但我要显示的时间是GMT表示。我正在尝试以下方法:

    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(timeStamp);
    Date date = cal.getTime();
    Log.d(Point.class.getSimpleName(), date.getHours() + ":" + date.getMinutes());
但这张照片是12:58

我做错了什么

编辑-对答案的响应

这是我使用的代码打印1969-12-13 10:54:48

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(1389967092*1000);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

    Log.d(Point.class.getSimpleName(), sdf.format(calendar.getTime));

默认的
Calendar.getInstance
根据设备的时区返回时间。但是,您可以请求不同的时区,如下所示:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

为了根据不同的时区打印当前时间,您可以使用
SimpleDateFormat
。例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Log.d(TAG, sdf.format(new Date()));

如果您的时间戳是UNIX时间戳,则它以秒为单位,而不是日历使用的毫秒。这将打印出12:58,并且我将其记录为Log.d(TAG,sdf.format(cal.getDate());它返回一个1969年的日期,那么这意味着你的时间戳是1969年的。使用正确的时间,它应该会工作。问题是将int转换为long,我不太明白为什么,但它现在似乎工作了。我会写一个答案将
1389967092*1000
更改为
1389967092*1000L
。注意1000结尾的L。它会我会尽可能长时间保持转换