【发布时间】:2014-02-07 00:49:42
【问题描述】:
我正在使用 Android,试图实现一些可以告诉我多久以前有人玩过游戏的东西。这就是我所拥有的:
Date date;
try {
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(g.getLastPlayed());
long milliseconds = date.getTime();
long timeNow = new Date().getTime();
DateUtils.
String timeSince = (String) DateUtils.getRelativeTimeSpanString (milliseconds, timeNow, DateUtils.MINUTE_IN_MILLIS);
TextView timeAgo = (TextView) convertView.findViewById(R.id.current_game_last_played_text);
timeAgo.setText(timeSince + " " + timeNow);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我在尝试过不同的路线时遇到了一些问题:
我尝试的一种方法是将数据库中的行设置为 DATETIMES,这就是您在尝试的第一行中看到的。将其转换为 SimpleDateFormat,因此我可以在此之后调用 getTime 并获取毫秒数。这似乎在我的模拟器上运行良好,但是当我把它放在手机上时,我得到了截然不同的结果。我进行了一些调试,发现毫秒的计算方式不同,具体取决于我使用的是模拟器、手机还是 Kindle。
有没有什么方法可以让毫秒无论在什么设备上总是相同的值?
我注意到的另一件事是,getTime 中的值似乎实际上是错误的。在 MySQL 中,当我执行 UNIX_TIMESTAMP(now()) 时,它会给出如下结果:
1391732897
虽然 getTime 在 Java 中让我得到这样的结果:
1391732385372
为什么 Java 这么长?
【问题讨论】:
-
Java 以毫秒为单位测量时间,而 Unix 时间戳以秒为单位。它们都起源于 1970-01-01,因此您只需乘以 1000 即可从一个转换为另一个。
-
“这么多”?你确定这不仅仅是秒和毫秒之间的差异吗?
-
好吧,我最初的帖子实际上是不正确的。真正的问题是基于我运行它的位置错误地计算了毫秒。 timeNow 每次都是正确的。
标签: java android date datetime unix-timestamp