有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android日期时区让我抓狂

我有一个Android应用程序,可以与GPS模块和SQLite数据库一起使用。一开始一切听起来都很好,但当我需要处理日期()和时区时,恐怖就来了

一点背景

GPS模块可以从卫星上获取日期。这是一件好事,我需要它在我的应用程序中,以确保有效的数据。从中返回的日期是GMT时间。 该日期作为StartTime插入到本地数据库的字段中。StartTime使用AES加密存储。当我解密StartTime时,我需要将其转换为日期,并保持格式为GMT

我所做的 从LocationListener中的GPS获取数据:

gpsDate = new Date(location.getTime());

通过使用new Date()默认情况下,GPS日期将在设备的当前时区中转换。因此,我得到的不是一个美好的太阳12月05日14:00:00 GMT 2010时间,而是太阳12月05日16:00:00 GMT+2010。为什么会这样?我只是想在getTime()中找个新的约会对象

我在数据库中插入数据:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
String date = outputFormat.format(gpsDate);

我在需要时检索日期:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String myStored = {decrypy from the database}
Date myStartDate = outputFormat.parse(myStoredDate);

myStored节目:2010-12-05 14:00

myStartDate显示:太阳12月5日16:00:00 GMT+2010年2月

这里面有些东西我不知道。我需要能够获得GMT格式的日期,插入它,转换它,比较它,计算差异。只有当我需要给他看的时候,我才需要用户时区中的日期

请照亮我


共 (1) 个答案

  1. # 1 楼答案

    问题似乎是您没有存储时区。你自己也说过,当从你存储的地方检索myStored时,它会在没有TZ的情况下返回。然后,当你调用parse时,你强制它使用GMT。因为GMT和你的本地时区有2个小时的不同,所以时间出来时有2个小时的不同

    简而言之,您应该能够利用卫星时间,使用SimpleDataFormat和z或z选项将输出格式化到存储它的任何位置。你甚至不应该使用setTimezone方法。然后使用与之前相同的dateformatter,而不是新的dateformatter,来解析存储传入日期的位置

    完成后,在将输出发送给用户之前,确定他们的时区,然后根据您拥有的数据设置时区