java.util.Date/JodaTime: учитывая java.util.Date, сгенерируйте начало и конец указанной даты - PullRequest
1 голос
/ 07 июля 2011

Если бы мне дали конкретную java.util.Date, как я могу сгенерировать начало и конец этой данной даты. Например, если моя дата August 25, 2011, тогда моя дата начала будет August 25, 2011 00 00 00, а моя дата окончания будет August 25, 2011 23 59 59

Справочная информация : (Прочтите ниже, если вы хотите знать, почему я задаю этот вопрос)

Я использую JPA для сопоставления date с моей базой данных MySql следующим образом. Я хочу, чтобы у date тоже было время, поэтому я использую TemoporalType.TIMESTAMP

@Temporal(TemporalType.TIMESTAMP)
private Date dateProcess; //java.util.Date

Мне нужно запросить все данные с определенной датой, и, поскольку date хранится, как указано выше, мне нужен диапазон дат для достижения того, что я хочу.

Мой план игры состоит в том, чтобы преобразовать java.util.Date в JodaTime#DateTinme, затем построить там дату начала и окончания и преобразовать ее обратно , чтобы я мог передавать в качестве параметров JPQL . Но кажется, что JodaTime очень неизменен, я не могу видеть метод установки в любом месте.

Ответы [ 3 ]

7 голосов
/ 07 июля 2011

A java.util.Date представляет собой момент во времени, без ссылки на часовой пояс или календарь.Один и тот же момент будет иметь разное начало / конец дня в зависимости от часового пояса наблюдателя.

Вы можете сделать что-то вроде:

DateTime dateTime = new DateTime(date.getTime(), timeZone);
LocalDate localDate = dateTime.ToLocalDate();

DateTime startOfDay = localDate.toDateTimeAtStartOfDay(timeZone);
DateTime startOfNextDay = localDate.plusDays(1).toDateTimeAtStartOfDay(timeZone);

Из двух последних переменныхможете вернуться к java.util.Date значениям, если хотите.Обычно они будут в полночь, но они могут не быть.

Обратите внимание, что вы должны использовать начало следующего дня эксклюзивным образом, а не последнюю секунду текущегодень включительно, чтобы избежать пропущенных значений, таких как 25 августа 2011 г. 23: 59: 59.500 ...

1 голос
/ 07 июля 2011
Date date; // your date

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date startDate = calendar.getTime();

calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date endDate = calendar.getTime();
1 голос
/ 07 июля 2011

Я считаю, что тип, который вы хотите, это DateMidnight. Сделайте новый DateMidnight и передайте ему DateTime, о котором идет речь, и он примет дату в полночь утром того же дня. Затем вы также можете использовать функцию plusDays(), чтобы добавить 1 день, чтобы узнать время окончания.

...