我从连接器中获取以下字符串:
" 2014-04-11T13:25:58.025 + 02:00"
我也是实际时间:
Calendar cal = Calendar.getInstance();
long timeNow = cal.getTimeInMillis();
如果连接器的日期超过10分钟,我应该定义。 所以我试图用毫秒来比较这两个日期。
//example date
String timeString = "2014-04-11T13:25:58.025+02:00";
long difference = 660000;
Calendar cSchedStartCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cSchedStartCal.setTimeZone(TimeZone.getTimeZone("Europe/Zurich"));
cSchedStartCal = DatatypeConverter.parseDateTime(timeString);
Date date = new Date(cSchedStartCal.getTime().getTime());
if (date.getTime() + difference < timeNow) {
System.out.println("too old");
} else {
System.out.println("ok");
}
但是当日期不久以来,我已经太老了,因为时区一定存在问题。
属性日期始终没有+02:00,这就是问题所在。 是否可以以适当的方式将时区小时数添加到日期?
而且我没有机会使用joda库。
答案 0 :(得分:1)
你需要:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
java.util.Date d = sdf.parse("2014-04-11T13:25:58.025+02:00");
XXX适用于Java 7及更高版本。
对于你的第二个问题,为什么这个简单的方法不能留下你的时区和Calendar
- 代码?许多人将时间量与10分钟相关联,参考全球时间,而不是在当地时区的DST跳跃期间。
if (d.getTime() + 10 * 60 * 1000L < System.currentTimeMillis()) {
System.out.println("too old");
} else {
System.out.println("ok");
}
评论更新:
d.getTime()
产生与2014-04-11T13:25:58.025 + 02:00相对应的unix纪元时间(以毫秒为单位)
如果您选择使用SAME instant进行类似的表示,则此纪元值不会更改:
2014-04-11T13:25:58.025+02:00
2014-04-11T12:25:58.025+01:00
2014-04-11T11:25:58.025Z (zero offset - zulu time)
表示2014-04-11T15:25:58.025
没有偏移,因此无法比较。请记住,此类表示由本地时间加偏移量组成。因此,为了获得UTC时区的全球时间,您必须SUBTRACT偏移,而不是添加偏移量。