使用java在iso中转换时间有麻烦

时间:2016-03-17 07:32:41

标签: javascript java datetime datetime-format iso

我使用下面的代码使用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());

2 个答案:

答案 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)