java - Android unix 时间戳 - 转换器

标签 java android date timestamp

在我的 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/

相关文章:

java - java中通过socket传输文件的最佳方法

java - ArrayAdapter 中的 createFromResources() 不能应用于微调器

android - 创建支持多个 API 级别的 Android 应用程序

javascript - 如何获取日期对象

python - python中两个日期范围之间的重叠日期

java - 对象和属性值

java - MotionEvents 未触发

java - _ID不存在

android - 如何在 skobbler 中使用 POI/地理编码搜索

java - 输入年份和第一天,获取一个月的第一天