我使用下面的代码使用java格式化iso格式的日期时间(我从当前时间缩短1分钟)并得到输出为" 2016-03-17T11:38:21。 xxxZ" < x代表一些数字>我希望这与DB中提到的时间进行比较。
构建该数据插入查询的人,他使用javascript来获取时间并将其格式化为iso。
数据库中的日期如下所示" 2016-03-17T06:09:21.530Z"它的实际时间是" 11:39:21 GMT + 0530(印度标准时间)"这与我当前的时间相似,但我将这两个日期作为字符串进行比较。从DB获得1分钟的早期数据。在这种情况下,我无法获得输出,因为这两个字符串不匹配。任何人都可以重新灌注吗? 我使用OrientDB
Java代码
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Calendar date = Calendar.getInstance();
long t = date.getTimeInMillis();
date.setTimeInMillis(t);
date.set(Calendar.MINUTE, date.get(Calendar.MINUTE) - 1);
String time1minEarly = df.format(date.getTime());
答案 0 :(得分:0)
使用Calendar.set()和Calendar.get()不会以您想要的方式修改日期:
这将修改您案例中的分钟字段。因此,减去“1”将减少分钟,但不会为分钟最初为零的情况提供可行的日期。
您可以从“t”变量中减去几分钟的毫秒来获得真正的分钟偏移量。
为了便于使用,您还可以考虑遵循@Prashant的建议并使用joda库中的LocalDateTime类。
答案 1 :(得分:0)
感谢大家的支持。 我弄清楚如何做到这一点。这很容易。 @rpy和@Prashant都是正确的。日历不适合解决我的问题。也是LocalDateTime。但它确实帮助我弄清楚了正确的方法。
@rpy和@Prashant他们都错过了javascript时间代表UTC时间的一件事。这就是问题所在。 (与我的位置相比,它落后了5.5小时)所以,我在下面的代码中找到了这个。它做了我想做的事。
这很简单。您所要做的就是提供您的区域ID。 (您可以使用此代码获取Zone ID:转到链接 - http://www.javadb.com/list-possible-timezones-or-zoneids-in-java/)
您也可以通过更改“DateTimeFormatter”值来选择这么多格式。
ZoneId UTCzoneId = ZoneId.of("UTC");
ZonedDateTime time1minEarly = ZonedDateTime.now(UTCzoneId).minusMinutes(1);
String UTCtime1minerly = time1minEarly.format(DateTimeFormatter.ISO_INSTANT);
Out out与此类似:“2016-03-17T10:39:21.530Z”
( - 当时的UTC时间:2016-03-17T10:40:21.530Z)