Android中的周日历计算

Android中的周日历计算,android,android-calendar,Android,Android Calendar,正在尝试开发一个类似于股票日历的应用程序。我正在我的应用程序上尝试每周查看 我已经正确地显示了当前的星期日期 现在我正在努力完成上一周和下一周的计算。在之前的计算中,我尝试了以下方法: if(calender.get(Calendar.WEEK_OF_YEAR) == calender.getActualMinimum(Calendar.WEEK_OF_YEAR)) { calender.set((calender.get(Calendar.YEAR)-1), calender.get

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

我已经正确地显示了当前的星期日期

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

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

有没有更好的方法让你上一周或者下一周都可以

有人能帮我修一下吗


谢谢

首先,你的问题与安卓无关。日历是一个JavaAPI。请编辑您的问题标签

您的错误在代码的这一部分:

 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);
除了将当前周设置为上一周外,方法集还计算修改后的年份和日期

此代码:

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

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

获取前一周的信息:

关于下周获得:

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


希望对其他人有用。

我已经像你告诉我的那样试过了。我得到2014年第1周和2015年第52周-请看看这里的问题日志文件:你做错了什么。我发布的代码很好用。使用以下内容更改上面发布的整个if子句:calendar.setCalendar.WEEK\u OF_YEAR,calendar.getCalendar.WEEK\u OF_YEAR-1;。这是直接的本地java代码。如果它对我有效,它对你也有效。如果我使用上面的代码将Day_OF_YEAR设置为1并尝试它,它是有效的,但我不会将Day OF YEAR设置为onCreate,我会得到类似日志的结果。即使你没有发送一年中的哪一天,你也会收到结果吗?你能检查一下并告诉我吗..因为我没有收到结果。你不需要设置一年中的哪一天。我只是为了这个例子而使用它。要获取某个日期的前一周和下一周,您只需使用“Calendar.getCalendar.week\u of_YEAR+/-1”。顺便说一下,您还没有阅读日历API文档,是吗?在发布这样的简单问题之前,你应该搜索更多。互联网上有很多方法可以显示你想要什么,以及如何发现一年中哪几天属于那一周。
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);