我需要根据作为参数发送的日期来获取一周中所有日期的数字(MON到SUN)。
例如,
我通过5月2日,我得到了一个阵列[30,1,2,3,4,5,6],这实际上是本周
或者,我通过5月16日,我得到一个数组[14,15,16,17,18,19,20]。
我尝试使用此代码,但它从今天起7天后返回,这是我不想要的。
//get which week of month
Calendar now = Calendar.getInstance();
now.set(mYear, mMonth, Integer.parseInt(extractedDay));
int weekOfMonth = now.get(Calendar.WEEK_OF_MONTH);
//get all days of clicked week
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(mYear, mMonth, Integer.parseInt(extractedDay));
String[] days = new String[7];
for (int i = 0; i < 7; i++)
{
days[i] = format.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
但这不是我需要的。我需要通过今天(THU)并获得本周五月的日期 - 4月30日星期一至5月6日星期日。
修改
我意识到我有一个代码可以检测出一个月的哪个星期。有没有办法使用这些数据并设置星期一的日期?例如,我通过5月16日,然后我发现它是5月的第3周,并且我将变量firstDayOfWeek
(一个新变量)设置为5月14日。
答案 0 :(得分:20)
您必须先减去所选日期的工作日,才能从一周的第一天开始。请尝试以下代码:
public static void main(String[] args){
Calendar now = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
String[] days = new String[7];
int delta = -now.get(GregorianCalendar.DAY_OF_WEEK) + 2; //add 2 if your week start on monday
now.add(Calendar.DAY_OF_MONTH, delta );
for (int i = 0; i < 7; i++)
{
days[i] = format.format(now.getTime());
now.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(Arrays.toString(days));
}
今天,它输出:
[04/30/2012,05/01 / 2012,05 / 02 / 2012,05 / 03 / 2012,05 / 04 / 2012,05 / 05 / 2012,05 / 06/2012]
答案 1 :(得分:5)
您的问题已经得到解答,但我想补充一下。您的代码在两个方面存在问题:
mYear
是int
而exactDay
是String
?)。这使您难以测试代码!
因此,我提出了一个不同的方法:
public class DaysOfCurrentWeek {
public static void main(String[] args) {
Date refDate = new Date();
Date[] days = getDaysOfWeek(refDate, Calendar.getInstance().getFirstDayOfWeek());
for (Date day : days) {
System.out.println(day);
}
}
private static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(refDate);
calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
Date[] daysOfWeek = new Date[7];
for (int i = 0; i < 7; i++) {
daysOfWeek[i] = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
return daysOfWeek;
}
}
代码的工作原理如下:
new Date()
)。getDaysOfWeek()
执行“脏工作”。通过firstDayOfWeek
,您可以自由选择MONDAY
或SUNDAY
作为一周的开始。在这个例子中,我只使用日历的默认值。Date
。这样你就可以让调用代码决定做什么 - 打印它或做进一步的计算。现在您可以简单地测试getDaysOfWeek()方法,而无需担心格式化或参考日期的创建方式。
答案 2 :(得分:1)
您需要在当前代码中的某处使用这行代码:
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
它应该至少在for循环之前。
答案 3 :(得分:0)
您需要设置日期 后设置日期
calendar.set(mYear, mMonth, Integer.parseInt(extractedDay));
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);