我将日期和时间存储为我的sql数据库中的一个字段,格式如下:dd/mm/yy hh:mm
。我正在使用asynctask将此信息导入我的Android应用程序,然后填充listview。
我需要做的是检查导入的日期是在当前日期和时间之前还是之前。我的数据库中的所有数据都是GMT,我想知道我应该在java中调用什么方法来最好地表示当前日期和时间独立用户所在的时区,以便我可以进行比较。
我主要担心的是避免用户通过更改手机上的系统时间来欺骗应用。
答案 0 :(得分:1)
如果您无法信任用户设备/计算机上的当前日期时间,那么您有两种选择:
如果您从其他地方获得时间,那么您需要使用Java中的日期时间值。在做这样的工作时,使用一个好的日期时间库。对于Android,这意味着Joda-Time库。避免使用捆绑的java.util.Date/.Calendar,因为它们非常麻烦。
关于此主题的StackOverflow还有许多其他问题和解答,但这是一个快速未经测试的示例。我假设您使用JDBC驱动程序从数据库中获取java.sql.Timestamp值。
java.sql.Timestamp ts = myResultSet.getTimestamp( "my_column_" ); // Get date-time object from your database via JDBC driver.
…
DateTime now = … // Get current date-time from other computer as discussed above.
DateTime when = new DateTime( ts , DateTimeZone.UTC ); // Convert java.sql.Timestamp to org.joda.time.DateTime object.
Boolean rowIsPast = when.isBefore( now ); // Compare DateTime objects.
如果要从数据库获取数据的日期时间值的字符串表示,请尝试通过JDBC,java.sql.Timestamp(或将来,由新的定义的类型的对象)获取对象Java 8及更高版本中的java.time包)。如果您必须使用字符串表示,请在StackOverflow.com上搜索许多示例,将字符串解析为Java和Java中的日期时间值。 Joda-Time(使用搜索词“joda”)。
答案 1 :(得分:0)
String time1 = "16:00:00";
String time2 = "19:00:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime();
这会给你几秒钟的时差。检查这是否是正面的,看看哪个日期是"第一个"