在我的Android应用程序中,我以这种方式创建时间戳:
final BackupInfo backupInfo = new BackupInfo(description, System.currentTimeMillis(), backupContacts.size());
例如,使用System.currentTimeMillis()
现在我使用以下方法将其转换回日期格式:
public static String getDate(long time)
{
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
String date = DateFormat.format("dd-MM-yyyy HH:mm:ss", cal).toString();
return date;
}
它运作正常。
但是现在我从服务器收到时间戳,而我从getDate
收到的字符串日期不是正确的日期。
实际案例:
我的应用生成此时间戳:1403022230766
getDate
会返回此日期:17-06-2014 05:23:50
这对我来说是正确的。
现在出现问题,我从服务器获取此时间戳:1403022360
getdate
返回此日期:16-01-1970 18:43:42
这完全错误,它应该接近我的应用生成的时间戳。
服务器返回的时间戳大小减少了3位数。但是,如果我转到在线转换器,例如this one,我放1403022360
(服务器生成的TS),我得到一个正确的日期。
任何人都可以解释一下为什么这种差异以及我在getDate
方法中做错了什么我无法解码从服务器收到的时间戳?
答案 0 :(得分:3)
您的服务器以秒为单位返回时间戳,因此乘以1000即可获得毫秒数。
在线转换器工作正常,因为他们假设如果数量足够大,那么它是以毫秒为单位,如果它很短,那么就是以秒为单位。
Java / Android日期都是long
类型,因此它们可以保持毫秒数以获得更高的精度。