2015-09-23 3 views
-1

Я пишу приложение java, и я только начал с java Date. То, что я пытаюсь сделать, это прочитать json, который содержит две марки даты, которые выглядят так: 2015-05-20T17:24Z[UTC]. После того, как я прочитал две даты, я хочу взять только те объекты, у которых есть отметка времени между двумя датами, которые я только что прочитал. Может ли кто-нибудь помочь мне в работе с этим форматом?Формат даты Java получает все даты между двумя значениями даты

+1

Разберите формат 'java.util.Date' и используйте методы compareTo()' или 'before()' и 'after()'. Или введите даты в запрос и т. Д., В зависимости от того, как «я хочу использовать только те объекты, у которых есть отметка времени между двумя датами», должен/должен быть реализован (подсказка: необходимые детали). – Thomas

+0

Какая версия Java? Вы используете Java 8? (скажите «да») ... Если это так, пожалуйста, ознакомьтесь с новым API-интерфейсом Java 8 DateTime: http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html и https : //docs.oracle.com/javase/tutorial/datetime/ –

+0

@DaDaDom Я использую java 6 – dres

ответ

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 т.д.

Также можно использовать отсортированный карту с указанием даты объектов, как ключ.

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

Java 8

Start путем преобразования значения 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

+0

Я так хочу преобразовать все наше устаревшее программное обеспечение в Java 8 ...Большая часть рассуждений - это новая дата api. – Thomas

+0

@Thomas Я умер за «try-with-resources», когда вышла Java 7: P - Знай свою боль;) – MadProgrammer

+0

Действительно? Это заслужило понижение, потому что? Если я сделал что-то не так, я бы хотел узнать, что я могу исправить, и учиться на нем. – MadProgrammer

0

Создайте от/до ZonedDateTime годов, как сказал MadProgrammer:

ZonedDateTime from = ZonedDateTime.parse(text, DateTimeFormatter.ISO_ZONED_DATE_TIME); 

Затем создайте Joda DateTime «s для из/в: -

DateTimeZone zone = DateTimeZone.forID(zdt.getZone().getId()); 
DateTime from = new DateTime(zdt.toInstant().toEpochMilli()); 

Затем с помощью Joda-х Interval.contains(), чтобы проверить, если каждый Instant попадает в интервал - имея в виду, что исключает дату окончания.

Смежные вопросы