在我的 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
中做错了什么吗?我无法解码从服务器收到的时间戳的方法?
最佳答案
您的服务器返回的时间戳以秒为单位,因此乘以 1000 即可得到毫秒。
在线转换器可以正常工作,因为它们假设如果数字足够大,则以毫秒为单位,如果数字很短,则以秒为单位。
Java/Android 日期都是long
类型,因此它们可以保存毫秒以提高精度。
关于java - Android unix 时间戳 - 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269755/