[英]Java date format get all dates between two date values
我正在编写一个Java应用程序,而我刚开始使用java Date
。 我正在尝试做的是读取一个包含两个日期戳的json
: 2015-05-20T17:24Z[UTC]
。 读完两个日期后,我只想拍摄在刚读过的两个日期之间带有时间戳的对象。 谁能帮我使用这种格式吗?
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;
}
上面的函数将列出两个日期之间的所有有效日期对象
首先将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
日期是包容性的,你需要添加isEqual
同时检查了from
和to
日期(但只需要匹配一个,很明显)
现在,您应该可以使用与Joda-Time类似的功能
要解析日期,请使用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
等。
或者,使用以对象的日期为键的排序地图。
如MadProgrammer所说,从/到ZonedDateTime创建您的:
ZonedDateTime from = ZonedDateTime.parse(text, DateTimeFormatter.ISO_ZONED_DATE_TIME);
然后从/到创建Joda DateTime
:-
DateTimeZone zone = DateTimeZone.forID(zdt.getZone().getId());
DateTime from = new DateTime(zdt.toInstant().toEpochMilli());
然后使用Joda的Interval.contains()
检查每个Instant是否落在该间隔内-请记住, contains()
不包括结束日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.