Android中的每周日历计算

时间:2015-04-27 14:42:16

标签: android android-calendar

尝试开发类似于股票日历的应用程序。我正在尝试每周查看我的应用程序。

我的当前周日期正好显示。

现在我正在尝试完成上一周和下周的计算。我在之前的计算中尝试了以下内容:

if(calender.get(Calendar.WEEK_OF_YEAR) == calender.getActualMinimum(Calendar.WEEK_OF_YEAR)) 
{   
 calender.set((calender.get(Calendar.YEAR)-1), calender.getActualMaximum(Calendar.WEEK_OF_YEAR), 1);
} 
else 
{
    calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR)-1);
}

week = calender.get(Calendar.WEEK_OF_YEAR);
year = calender.get(Calendar.YEAR);

Log.e("Week","+ week"+ week);
Log.e("Year","+ Year"+ year);

这里几周的日志正常到第1周(1月1日),这是前一年我遇到问题的地方。该日志显示周为18,年为2017.我不知道为什么?

对于下周:到了12月底,它从第6周开始而不是第1周。奇怪的事情正在发生?

有没有更好的方法来获得前一周或下周?

有人可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,您的问题与Android无关。 Calendar是一个Java API。请修改您的问号。

你的错误在于代码的这一部分:

 calender.set((calender.get(Calendar.YEAR)-1), calender.getActualMaximum(Calendar.WEEK_OF_YEAR), 1);

无论您是否在一年的第一周,如果您想获得前一周,请致电以下方法:

calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR) - 1);

除了将当前周设置为上一周之外,方法set()还会计算修改后的年份和日期。

此代码:

calender.set(Calendar.DAY_OF_YEAR, 1);
System.out.println("Day: " +  calender.get(Calendar.DAY_OF_YEAR));
System.out.println("Week: " +  calender.get(Calendar.WEEK_OF_YEAR));
System.out.println("Year: " +  calender.get(Calendar.YEAR));

calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR) - 1);
System.out.println("Day: " +  calender.get(Calendar.DAY_OF_YEAR));
System.out.println("Week: " +  calender.get(Calendar.WEEK_OF_YEAR));
System.out.println("Year: " +  calender.get(Calendar.YEAR));

生成此输出:

Day: 1
Week: 1
Year: 2015
Day: 359
Week: 52
Year: 2014

答案 1 :(得分:0)

我解决了这个问题:认为这可能对那些努力获得上周和下周数字的人有用。

获得上一周

if(calender.get(Calendar.WEEK_OF_YEAR) == 2) 
{   
    calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR) - 1);
    calender.set(Calendar.DAY_OF_YEAR, 1);
} 
else 
{
  calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR) - 1);
}

week = calender.get(Calendar.WEEK_OF_YEAR);
year = calender.get(Calendar.YEAR);
fetchData(week, year);
break;

下周工作:

if(calender.get(Calendar.WEEK_OF_YEAR) == calender.getActualMaximum(Calendar.WEEK_OF_YEAR)) 
{   
 calender.set(Calendar.YEAR, calender.get(Calendar.YEAR) + 1);
 calender.set(Calendar.WEEK_OF_YEAR, 1);
} 
else 
{
 calender.set(Calendar.WEEK_OF_YEAR, calender.get(Calendar.WEEK_OF_YEAR) + 1);
}

week = calender.get(Calendar.WEEK_OF_YEAR);
year = calender.get(Calendar.YEAR);
fetchData(week, year);

PS: fetchData是一种方法,如果你给它一周和一年,它会给出那一周的日期。

希望它对其他人有用。