日期值不正确

时间:2014-02-07 00:49:42

标签: java android date datetime unix-timestamp

我正在使用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,这就是你在try的第一行看到的。将它转换为SimpleDateFormat,因此我可以在此之后调用getTime并获得毫秒数。这似乎在我的模拟器上工作正常但是当我把它放在我的手机上时,我得到了很多不同的结果。我做了一些调试,并意识到根据我是在模拟器,手机还是Kindle上,毫秒的计算方式不同。

有什么方法可以让毫秒始终是相同的值,无论它是什么设备?

我注意到的另一件事是,似乎来自getTime的值实际上是错误的。在MySQL中,当我执行UNIX_TIMESTAMP(now())时,它给我一个结果,如:

1391732897

当getTime回到Java中时,我会得到这样的结果:

1391732385372

为什么Java这么长?

2 个答案:

答案 0 :(得分:3)

MySQL的UNIX_TIMESTAMP()以秒为单位给出时间,而Java的new Date().getTime()以毫秒为单位给出时间。

答案 1 :(得分:2)

我猜这个问题与时区有关。 Date.getTime()以UTC(格林威治)时间返回值,如果getLastPlayed()返回的字符串是本地时间,即使您在1秒前播放,差异也可能是数小时(取决于您的时区)。