Как получить первый день текущей недели и месяца?

У меня есть дата нескольких событий, выраженных в миллисекундах [1], и я хочу знать, который события в текущей неделе и текущем месяце, но я не могу выяснить, как получить первый день (день/месяц/год) рабочей недели и преобразовать ее в миллисекунды, то же в течение первого дня месяца.

[1]Since January 1, 1970, 00:00:00 GMT
68
задан kamaci 11 March 2011 в 16:34
поделиться

4 ответа

Эта неделя в миллисекундах:

// get today and clear time of day
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear would not reset the hour of day !
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

// get start of this week in milliseconds
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
System.out.println("Start of this week:       " + cal.getTime());
System.out.println("... in milliseconds:      " + cal.getTimeInMillis());

// start of the next week
cal.add(Calendar.WEEK_OF_YEAR, 1);
System.out.println("Start of the next week:   " + cal.getTime());
System.out.println("... in milliseconds:      " + cal.getTimeInMillis());

Этот месяц в миллисекундах:

// get today and clear time of day
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear would not reset the hour of day !
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

// get start of the month
cal.set(Calendar.DAY_OF_MONTH, 1);
System.out.println("Start of the month:       " + cal.getTime());
System.out.println("... in milliseconds:      " + cal.getTimeInMillis());

// get start of the next month
cal.add(Calendar.MONTH, 1);
System.out.println("Start of the next month:  " + cal.getTime());
System.out.println("... in milliseconds:      " + cal.getTimeInMillis());
146
ответ дан 24 November 2019 в 14:04
поделиться

Первый день недели можно определить с помощью java.util.Calendar следующим образом:

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.setTimeInMillis(timestamp);
while (calendar.get(Calendar.DAY_OF_WEEK) > calendar.getFirstDayOfWeek()) {
    calendar.add(Calendar.DATE, -1); // Substract 1 day until first day of week.
}
long firstDayOfWeekTimestamp = calendar.getTimeInMillis();

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

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.setTimeInMillis(timestamp);
while (calendar.get(Calendar.DATE) > 1) {
    calendar.add(Calendar.DATE, -1); // Substract 1 day until first day of month.
}
long firstDayOfMonthTimestamp = calendar.getTimeInMillis();

Довольно многословно, да.


Java 7 будет поставляться со значительно улучшенным API даты и времени (JSR-310). Если вы пока не можете перейти, то можете пока использовать JodaTime, который делает все это менее сложным:

DateTime dateTime = new DateTime(timestamp);
long firstDayOfWeekTimestamp = dateTime.withDayOfWeek(1).getMillis();

и

DateTime dateTime = new DateTime(timestamp);
long firstDayOfMonthTimestamp = dateTime.withDayOfMonth(1).getMillis();
23
ответ дан 24 November 2019 в 14:04
поделиться

Вы должны быть в состоянии преобразовать ваше число в Java-календарь, например:

 Calendar.getInstance().setTimeInMillis(myDate);

Отсюда сравнение не должно быть слишком сложным.

0
ответ дан 24 November 2019 в 14:04
поделиться

В данном случае:

// get today and clear time of day
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR_OF_DAY);  <---- is the current hour not 0 hour
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

Итак, Calendar.HOUR_OF_DAY возвращает 8, 9, 12, 15, 18 как текущий час работы. Думаю, будет лучше изменить такую ​​строку на:

c.set(Calendar.HOUR_OF_DAY,0);

таким образом день всегда начинается в 0 часов

1
ответ дан 24 November 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: