Подтвердить что ты не робот

Java: Получить любой день в неделю из Календаря

Используя Calendar, я могу получить неделю, год и все данные для текущего дня. Как я могу перейти на конкретный день на этой неделе?

Скажем, calendar.get(Calendar.DAY_OF_WEEK); возвращает 3, что означает вторник. Теперь я хочу поговорить в пятницу на эту неделю или любой другой день на этой неделе. Как я могу это сделать?

Спасибо за ваши ответы. Думаю, мне нужно сделать сценарий более ясным. В основном, я пытаюсь отключить оповещения по электронной почте в моей системе в течение указанного периода. Я получаю такие значения, как: disableStart = "ПЯТНИЦА-19: 00" disableEnd = "SUNDAY-19: 00"

Теперь мне нужно проверить, следует ли отправлять электронное письмо в определенное время. например если сегодня = четверг в любое время, отправьте письмо но, если сегодня = суббота, любое время не может отправить как значения выше.

4b9b3361

Ответ 1

Если я правильно понимаю, вы можете использовать метод Calendar.set(Поле, значение).

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));

Производит вывод

6
08-10-2010
3
05-10-2010

Ответ 2

Calendar c = Calendar.getInstance();
Date date = new Date();
c.setTime(date);
System.out.println("Today:  " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("MONDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println("TUESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
System.out.println("WEDNESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("THURSDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println("FRIDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
System.out.println("SATURDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("SUNDAY: " + c.getTime());

дает:

Today:  Fri Oct 08 15:45:14 CEST 2010
MONDAY: Mon Oct 04 15:45:14 CEST 2010
TUESDAY: Tue Oct 05 15:45:14 CEST 2010
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010
THURSDAY: Thu Oct 07 15:45:14 CEST 2010
FRIDAY: Fri Oct 08 15:45:14 CEST 2010
SATURDAY: Sat Oct 09 15:45:14 CEST 2010
SUNDAY: Sun Oct 10 15:45:14 CEST 2010

Какие швы означают, что, по крайней мере, в моей системе, недели начинаются в понедельник.

Ответ 3

cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

Ответ 4

Спасибо Кевину и Морису за ответы. Они действительно дали мне начальную точку.

Я закончил этот тестовый код, если он кому-то поможет.

private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin)
{
    Calendar c = Calendar.getInstance();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    Date date = Calendar.getInstance().getTime();
    c.setTime(date);
    c.set(Calendar.DAY_OF_WEEK, nDay);
    c.set(Calendar.HOUR_OF_DAY, nHour);
    c.set(Calendar.MINUTE, nMin);
    return c.getTime();
}

public static void main(String[] args)
{
    Date start = getTimeForAnyDayInWeek(6, 19, 00);
    Date end = getTimeForAnyDayInWeek(8, 19, 00);
    Date c = new Date();

    if (start.before(c) && c.before(end))
        System.out.println("BLOCK");
    else
        System.out.println("SEND");
}

Спасибо, Анубхав

Ответ 5

Это прекрасный пример того, почему jodatime настолько хорош, вот мой похожий код

  DateTime dt = new DateTime(); //current datetime, jodatime format
  DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday");
  Date convertedtorubbishdateformat = fridayLastWeek.toDate();

Раньше я тратил столько времени на стандартную дату/календарь java. Тогда я получил jodatime, вы не пожалеете, он, по-видимому, будет использоваться как часть стандартной java в будущем. Я не беспокоился о том, чтобы надолго размять банку, я бы хотел, чтобы я это сделал, вы не пожалеете об этом.