2

我有一个警报应用程序,并将警报存储到数据库中。所有警报都运行良好,并且值(毫秒)存储为正确的数字。现在我正在尝试从我的数据库中显示这些时间。我正在使用日历以时间格式检索时间:

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);

Milis 从(已测试)中检索为正确的数字,Cursor但是当我getTime()以 HH:mm 格式显示时,它总是显示一个额外的小时。因此,如果 milis 值为:61200000 (17:00),则日历显示为 18:00。我想不通。

4

2 回答 2

3

我认为您必须将 TimeZone 设置为您的位置尝试

timeformat.setTimeZone(TimeZone.getTimeZone("GMT"));

例如

于 2013-02-01T15:36:51.420 回答
1

Calendar.getInstance() 将绑定到 TimeZone。如果您没有特别指定它,它将使用 JRE 的默认值。我猜你的是GMT+1。因此,因为您(正确地)在没有时区的情况下保存原始毫秒,所以它正在失去那个小时。尝试:

    TimeZone utc = TimeZone.getTimeZone("UTC");
    日历日历 = Calendar.getInstance(utc);
于 2013-02-01T15:40:27.240 回答