Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期值不正确_Java_Android_Date_Datetime_Unix Timestamp - Fatal编程技术网

Java 日期值不正确

Java 日期值不正确,java,android,date,datetime,unix-timestamp,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(); DateUt

我正在使用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,这就是我在尝试的第一行中所做的。将其转换为SimpleDataFormat,这样我就可以在此之后调用getTime并获取毫秒数。这在我的模拟器上似乎工作得很好,但当我把它放在手机上时,我得到了截然不同的结果。我做了一些调试,意识到毫秒的计算是根据我是在模拟器、手机还是Kindle上而不同的

是否有任何方法可以使毫秒始终保持相同的值,无论它在什么设备上

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

1391732897

当getTime回到Java时,我得到了如下信息:

1391732385372


为什么Java的时间这么长?

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

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

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

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

Java以毫秒为单位测量时间,而Unix时间戳以秒为单位。它们都起源于1970-01-01,所以你只需乘以1000就可以从一个转换到另一个。“这么多”?你确定这不仅仅是秒和毫秒之间的差异吗?好吧,我最初的帖子实际上是不正确的。真正的问题是,根据我运行它的位置,毫秒的计算不正确。timeNow每次都是正确的。Java以毫秒为单位测量时间,而Unix时间戳以秒为单位。它们都起源于1970-01-01,所以你只需乘以1000就可以从一个转换到另一个。“这么多”?你确定这不仅仅是秒和毫秒之间的差异吗?好吧,我最初的帖子实际上是不正确的。真正的问题是,根据我运行它的位置,毫秒的计算不正确。timeNow每次都是正确的。那么我应该以什么格式将值保存到数据库中呢?实际时间并不重要,因为它们永远不会显示给用户,所以我不在乎它们在哪个时区。我只关心时差。你应该使用相同的函数或方法来存储和比较,不管是哪一个。例如,在这两个实例中都使用Date().getTime()是可以的。我可以通过将所有日期保存为我数据库中的大整数来让它工作。基本上,当我插入时,我会这样做:UNIX_TIMESTAMP(now())*1000。因此,当我得到这些值时,我根本不需要进行任何解析。那么,我应该以什么格式将这些值保存在数据库中呢?实际时间并不重要,因为它们永远不会显示给用户,所以我不在乎它们在哪个时区。我只关心时差。你应该使用相同的函数或方法来存储和比较,不管是哪一个。例如,在这两个实例中都使用Date().getTime()是可以的。我可以通过将所有日期保存为我数据库中的大整数来让它工作。基本上,当我插入时,我会这样做:UNIX_TIMESTAMP(now())*1000。所以当我拿回来的时候,我根本不需要做任何解析。正确答案。所以答案是:乘以1000。是的,这个答案是正确的。epx给了我最终的答案,所以我选择了他的答案。正确答案。所以答案是:乘以1000。是的,这个答案是正确的。epx给了我最终的答案,所以我选择了他的答案。