Android 中的周历计算

Weekly Calendar calculation in Android

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

我可以正确显示当前的星期日期。

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

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 周。奇怪的事情发生了吗?

是否有更好的方法来获取上一周或下周?

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

谢谢!

首先,你的问题与Android无关。日历是一个 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

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

前一周:

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 是一种方法,如果您给它提供周和年,它将给出该周的日期。

希望对其他人有用。