Только одно выражение, чтобы получить дату вчерашнего дня и первый день месяца - PullRequest
5 голосов
/ 12 августа 2010

я использую инструменты отчетности, которые поддерживают только одно строчное выражение

В качестве примера я хочу получить дату вчерашнего дня

у класса Calendar есть метод add, но он возвращает void, так что

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()

не работает

не знаю, как это сделать

Спасибо

Ответы [ 6 ]

4 голосов
/ 12 августа 2010

Использование Joda-Time :

new org.joda.time.DateTime().minusDays(1).toDate();
2 голосов
/ 12 августа 2010

Если он действительно должен быть однострочным и не имеет значения, понятен ли код, я думаю, что следующее утверждение должно работать:

Date yesterday = new SimpleDateFormat("yyyyMMdd").parse(
    ""+(Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()))-1));

Форматирует текущую дату как «ггггМдд», например «20100812» на сегодня, анализирует его как int: 20100812, вычитает одно: 20100811, а затем анализирует дату «20100811», используя предыдущий формат. Это также будет работать, если сегодня первое число месяца, так как 0-е ​​число анализируется мягким DateFormat как последний день предыдущего месяца.

Должен также работать формат «ггггДДД» (D - день года).

Для первого дня текущего месяца вы можете использовать аналогичный трюк:

Date firstday = new SimpleDateFormat("yyyyMMdd").parse(
    new SimpleDateFormat("yyyyMM").format(new Date())+"01");
2 голосов
/ 12 августа 2010

Разве вы не можете сделать что-то вроде

new Date( new Date().getTime() - 86400000 );

, чтобы получить текущее время, вычесть число миллисекунд в день и построить из этого новый объект даты?

1 голос
/ 12 августа 2010

Предполагая, что вам нужен объект java.util.Date (так как вы использовали getTime() в своем вопросе и который возвращает java.util.Date), вы можете сделать:

// Get yesterday's date. System.currentTimeMillis() returns the
// number of milliseconds between the epoch and today, and the
// 86400000 is the number of milliseconds in a day.
new Date(System.currentTimeMillis() - 86400000);

К сожалению, вы не видели вашпервый день месяца до запроса.Я придумал следующее, чтобы получить это, используя util.Date, но я думаю, что сейчас самое время переключиться на использование Joda или Calendar ... (Уважаемый ТАК, пожалуйста, не голосуйте за меняужасные последствия следующего ...)

// This will return the day of the week as an integer, 0 to 6.
new Date(System.currentTimeMillis() - ((new Date().getDate()-1) * 86400000)).getDay();
0 голосов
/ 27 февраля 2015

Это то, что я использую в JasperReports:

// Today
new java.util.Date().format('yyyy-MM-dd')
// Yesterday
new SimpleDateFormat("yyyy-MM-dd").format(new Date()-1)

// First Day of current month
new java.util.Date().format('yyyy') + "-" + new java.util.Date().format('MM') + "-01"

Я предпочитаю использовать формат ISO YYYY-MM-DD, потому что он распознается везде и избегает путаницы региональных форматов (dd/mm позиция в поле даты).

0 голосов
/ 09 февраля 2011

Это должно быть сделано следующим образом:

Calendar cal = Calendar.getInstance();
cal .add(Calendar.DAY_OF_MONTH,-1);
cal .getTime();

Когда вы делаете это:

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()

По сути, вы запрашиваете метод (add()), который возвращает void для запуска.getTime().Это не может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...