Java 显示错误时间的Android日历
我有一个报警应用程序,我将报警存储到数据库中。所有报警工作正常,数值(毫秒)存储为正确的数字。现在我正试图从我的数据库中显示这些时间。我使用日历以时间格式检索时间:Java 显示错误时间的Android日历,java,android,database,calendar,milliseconds,Java,Android,Database,Calendar,Milliseconds,我有一个报警应用程序,我将报警存储到数据库中。所有报警工作正常,数值(毫秒)存储为正确的数字。现在我正试图从我的数据库中显示这些时间。我使用日历以时间格式检索时间: Calendar calendar = Calendar.getInstance(); SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm"); milis = c.getInt(2); calendar.setTimeInMillis(milis); vreme =
Calendar calendar = Calendar.getInstance();
SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm");
milis = c.getInt(2);
calendar.setTimeInMillis(milis);
vreme = timeformat.format(calendar.getTime());
listavreme.add(vreme);
mili是从
光标
(已测试)中检索到的正确数字,但是当我以HH:mm格式显示getTime()
时,它总是显示一个额外的小时。因此,如果milis值为:61200000(17:00),日历将其显示为18:00。我想不出来。我想你必须把时区设置到你的位置
试一试
例如我认为您必须将时区设置为您所在的位置 试一试 例如,Calendar.getInstance()将绑定到时区。如果您没有明确地给它一个,它将使用JRE的默认值。我猜你的是格林尼治标准时间+1。因此,因为你(正确地)在没有时区的情况下保存了原始毫秒数,所以它正在损失这一小时。尝试: TimeZone utc = TimeZone.getTimeZone("UTC"); Calendar calendar = Calendar.getInstance(utc); 时区utc=时区。getTimeZone(“utc”); 日历=Calendar.getInstance(utc); Calendar.getInstance()将绑定到时区。如果您没有明确地给它一个,它将使用JRE的默认值。我猜你的是格林尼治标准时间+1。因此,因为你(正确地)在没有时区的情况下保存了原始毫秒数,所以它正在损失这一小时。尝试: TimeZone utc = TimeZone.getTimeZone("UTC"); Calendar calendar = Calendar.getInstance(utc); 时区utc=时区。getTimeZone(“utc”); 日历=Calendar.getInstance(utc);
所以最好是把它保存在已经绑定到时区的地方你做得对。始终保存没有时区的日期和时间。时区应该只是UI的装饰——仅此而已。所有存储的内容都应该是纯UTC格式。所以我在处理用户问题时只是设置了时区?你知道有什么奇怪吗?我的时区是gmt+1,当然是手机,但当我把calendar.setTimeZone(timezone.getTimeZone(“gmt+1”);`同样的情况也会发生(时间显示时额外增加1小时),它只适用于GMT,为什么?我想我必须将它设置为我的时区?嗯,只有当我将时区设置为我的格式而不是日历时,它才起作用,所以最好将它保存为已绑定到时区的状态?不你做得对。始终保存没有时区的日期和时间。时区应该只是UI的装饰——仅此而已。所有存储的内容都应该是纯UTC格式。所以我在处理用户问题时只是设置了时区?你知道有什么奇怪吗?我的时区是gmt+1,当然是手机,但当我把calendar.setTimeZone(timezone.getTimeZone(“gmt+1”);`同样的情况也会发生(时间显示时额外增加1小时),它只适用于GMT,为什么?我想我必须把它设置为我的时区?嗯,只有当我把时区设置为我的格式而不是日历时,它才起作用