Java: получить любой день недели из календаря - PullRequest
10 голосов
/ 08 октября 2010

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

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

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

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

Ответы [ 5 ]

25 голосов
/ 08 октября 2010

Если я правильно понимаю, вы можете использовать метод 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
6 голосов
/ 08 октября 2010
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

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

2 голосов
/ 08 октября 2010

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

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

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

2 голосов
/ 08 октября 2010

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

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

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");
}

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

2 голосов
/ 08 октября 2010

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

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