2015-06-12 4 views
1
public static void main(String[] args) { 
    int week = 1; 
    int year = 2010; 


    Calendar calendar = Calendar.getInstance(); 
    calendar.clear(); 
    calendar.set(Calendar.WEEK_OF_YEAR, week); 
    calendar.set(Calendar.YEAR, year); 


    Date date = calendar.getTime(); 
    System.out.println(date); 
} 

Я ищу точное начало и конец DATE в соответствии с нашими настольными календарями, если я даю неделю, год в качестве входных данных. Но приведенный выше код дает вывод как 27th Jan, 2009, Sunday. Я знаю, что это потому, что по умолчанию первый день в неделю это воскресенье, как в США, но мне нужно, как на рабочем столе календарь 1st Jan, 2010, Friday в качестве даты начала неделиКалендарь - Недельное время - Java

Мой Требование: Если мой вход:

  • неделя как '1',
  • месяц как '5',
  • Год как '2015'

мне нужно:

1st May, 2015 --> as first day of the week 
    2nd May, 2015 --> as last day of the week 

Если мой вход:

  • неделя как '1',
  • Месяц как '6',
  • Год как '2015'

Мне нужно:

1st June, 2015 --> as first day of the week 
    6th June, 2015 --> as last day of the week 

Может ли кто-нибудь мне помочь?

+1

Какую нумерацию в неделю вы ищете? Существует множество различных вариантов, но вы должны быть очень точными в отношении требований. –

+0

Вы хотите, чтобы пятница стала началом недели? – Taylor

+3

Примечание: если вы используете Java SE 8, рассмотрите возможность использования нового API Date & Time. Другие считают использование Joda Time. – Puce

ответ

1

Вместо использования CALENDAR.Week используйте Calendar.DAY_OF_YEAR. Я просто проверял, и это работает для меня:

public static void main(String[] args) { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.clear(); 
    calendar.set(Calendar.YEAR, 2010); 
    calendar.set(Calendar.DAY_OF_YEAR, 1); 
    System.out.println(calendar.getTime()); 
    calendar.set(Calendar.DAY_OF_YEAR, 7); 
    System.out.println(calendar.getTime()); 
} 

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

Редактировать: Если вы хотите ввести месяц, вы также можете использовать Calendar.DAY_OF_MONTH.

1

Я написал виджет календаря Swing. Один из методов в этом виджету вычисляет первый день недели, когда неделя начинается с выбранного пользователем дня, например, в пятницу.

startOfWeek - это int, который принимает постоянную календаря, например Calendar.FRIDAY.

DAYS_IN_WEEK является ИНТ константа со значением 7.

/** 
* This method gets the date of the first day of the calendar week. It could 
* be the first day of the month, but more likely, it's a day in the 
* previous month. 
* 
* @param calendar 
*   - Working <code>Calendar</code> instance that this method can 
*   manipulate to set the first day of the calendar week. 
*/ 
private void getFirstDate(Calendar calendar) { 
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) % DAYS_IN_WEEK; 
    int amount = 0; 
    for (int i = 0; i < DAYS_IN_WEEK; i++) { 
     int j = (i + startOfWeek) % DAYS_IN_WEEK; 
     if (j == dayOfWeek) { 
      break; 
     } 
     amount--; 
    } 
    calendar.add(Calendar.DAY_OF_MONTH, amount); 
} 

Остальная часть кода можно увидеть в моей статье, Swing JCalendar Component.

Смежные вопросы