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 是一种方法,如果您给它提供周和年,它将给出该周的日期。
希望对其他人有用。
正在尝试开发一个类似于股票日历的应用。我正在尝试每周查看我的应用程序。
我可以正确显示当前的星期日期。
现在我正在尝试完成上一周和下一周的计算。我在之前的计算中尝试了以下方法:
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 是一种方法,如果您给它提供周和年,它将给出该周的日期。
希望对其他人有用。