Java日期格式获取两个日期值

时间:2015-09-23 07:42:45

标签: java datetime

我正在编写一个java应用程序,我刚开始使用java Date。我想要做的是阅读包含两个日期戳的json2015-05-20T17:24Z[UTC]。在我读完两个日期之后,我只想在我刚读过的两个日期之间有时间戳的对象。任何人都可以帮助我如何使用这种格式?

4 个答案:

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

Java 8

首先将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)) {

}

现在,这是独占的,如果您希望fromto日期包含在内,您需要为{{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) >= 0object.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()排除了结束日期。