Java: Получить любой день в неделю из Календаря
Используя Calendar
, я могу получить неделю, год и все данные для текущего дня. Как я могу перейти на конкретный день на этой неделе?
Скажем, calendar.get(Calendar.DAY_OF_WEEK);
возвращает 3, что означает вторник. Теперь я хочу поговорить в пятницу на эту неделю или любой другой день на этой неделе. Как я могу это сделать?
Спасибо за ваши ответы. Думаю, мне нужно сделать сценарий более ясным.
В основном, я пытаюсь отключить оповещения по электронной почте в моей системе в течение указанного периода.
Я получаю такие значения, как:
disableStart = "ПЯТНИЦА-19: 00"
disableEnd = "SUNDAY-19: 00"
Теперь мне нужно проверить, следует ли отправлять электронное письмо в определенное время.
например если сегодня = четверг в любое время, отправьте письмо
но, если сегодня = суббота, любое время не может отправить как значения выше.
Ответы
Ответ 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 в будущем. Я не беспокоился о том, чтобы надолго размять банку, я бы хотел, чтобы я это сделал, вы не пожалеете об этом.