我正在编写一个java应用程序,我刚开始使用java Date
。我想要做的是阅读包含两个日期戳的json
:2015-05-20T17:24Z[UTC]
。在我读完两个日期之后,我只想在我刚读过的两个日期之间有时间戳的对象。任何人都可以帮助我如何使用这种格式?
答案 0 :(得分:1)
public static List<Date> getDaysBetweenDates(Date startdate, Date enddate)
{
List<Date> dates = new ArrayList<Date>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(startdate);
while (calendar.getTime().before(enddate))
{
Date result = calendar.getTime();
dates.add(result);
calendar.add(Calendar.DATE, 1);
}
return dates;
}
上面的函数将列出两个日期之间的所有有效日期对象
答案 1 :(得分:1)
首先将String
值转换为可比较的值
String text = "2015-05-20T17:24Z[UTC]";
ZonedDateTime from = ZonedDateTime.parse(text, DateTimeFormatter.ISO_ZONED_DATE_TIME);
现在,(显然),您还需要一个to
日期,但转换过程是相同的。需要时,将要比较的值转换为ZonedDateTime
对象(如上所述)并使用它的功能来确定它是否在指定范围内...
ZonedDateTime from = ...;
ZonedDateTime to = ...;
ZonedDateTime date = ...;
if (date.isAfter(from) && date.isBefore(to)) {
}
现在,这是独占的,如果您希望from
和to
日期包含在内,您需要为{{1}添加isEqual
检查}}和from
日期(但显然只需匹配一个)
现在,您应该能够使用类似于使用Joda-Time
的东西答案 2 :(得分:0)
要解析日期,请使用SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'hh:mm'Z'[ZZZ]" );
Date date = sdf.parse( "2015-05-20T17:24Z[UTC]" );
然后循环遍历要过滤的对象并检查object.date.compareTo(startDate) >= 0
和object.date.compareTo(endDate) <= 0
等。
或者使用带有对象'date作为关键字的有序地图。
答案 3 :(得分:0)
MadProgrammer说:
创建你的from / to ZonedDateTime&#39;ZonedDateTime from = ZonedDateTime.parse(text, DateTimeFormatter.ISO_ZONED_DATE_TIME);
然后为from / to创建Joda DateTime
&#: -
DateTimeZone zone = DateTimeZone.forID(zdt.getZone().getId());
DateTime from = new DateTime(zdt.toInstant().toEpochMilli());
然后使用Joda的Interval.contains()
来检查每个Instant是否属于这个区间 - 请记住contains()
排除了结束日期。