上个月的java周计数
在java中,如何获得上个月的周数,即从周一开始的一周上个月的java周计数,java,calendar,Java,Calendar,在java中,如何获得上个月的周数,即从周一开始的一周 cal.setFirstDayOfWeek(Calendar.MONDAY); cal是Calendar实例 如果一周的第一天不是星期一,则返回0。因此,它必须被计算为上周的前几个月,这是我的要求。快速和肮脏(考虑到我在上述评论中提出的要求): 您的问题不是很清楚,但可能您正在寻找以下内容: Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); // today's
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal
是Calendar
实例
如果一周的第一天不是星期一,则返回0。因此,它必须被计算为上周的前几个月,这是我的要求。快速和肮脏(考虑到我在上述评论中提出的要求):
您的问题不是很清楚,但可能您正在寻找以下内容:
Calendar cal = Calendar.getInstance();
cal.setTime(new Date()); // today's date
// previous month from today
cal.add(Calendar.MONTH, -1);
// get to the 1st week
cal.add(Calendar.DATE, -7 * (cal.get(Calendar.DAY_OF_MONTH)/7));
// Get to the 1st Mon of last month
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// # of days in last month
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
// print # of week since Mon of last month
int numWeeks = ((maxDay-cal.get(Calendar.DATE))/7)+1;
System.out.printf("# of weeks from Mon in last month: %d%n", numWeeks);
如果您想计算上个月的所有周一,请访问:
public int getNofWeeks() {
Calendar cal = Calendar.getInstance();
while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
cal.roll(Calendar.DATE, false);
}
int currentMonth = cal.get(Calendar.MONTH);
int previousMonth = (currentMonth + 12 - 1) % 12;
int prePreviousMonth = (currentMonth + 12 - 2) % 12;
int nofWeeks = 0;
do {
int month = cal.get(Calendar.MONTH);
if (month == previousMonth) {
nofWeeks++;
}
if (month == prePreviousMonth) {
break;
}
cal.roll(Calendar.WEEK_OF_YEAR, false);
} while (true);
return nofWeeks;
}
java.time
避免使用现在被java.time类取代的麻烦的旧日期时间类
如果您的日历
实际上是一个GregoriaCalendar
日历,则将其转换为ZonedDateTime
GregorianCalendar gc = (GregorianCalendar) myCal;
ZonedDateTime zdt = gc.toZonedDateTime();
只提取日期
LocalDate ld = zdt.toLocalDate();
第一到第一
这个月的第一天,下个月的第一天。使用中定义的(注意复数形式)
计算两周之间的时间
long weeks = ChronoUnit.WEEKS.between( firstOfThisMonth , firstOfNextMonth );
星期一至星期一
如果要从星期一到星期一,请使用中已定义的不同枚举对象
LocalDate firstMondayOfThisMonth = ld.with( TemporalAdjusters.firstInMonth( DayOfWeek.MONDAY ) );
LocalDate firstMondayOfNextMonth = ld.plusMonths( 1 ).with( TemporalAdjusters.firstInMonth( DayOfWeek.MONDAY ) );
long weeks = ChronoUnit.WEEKS.between( firstMondayOfThisMonth , firstMondayOfNextMonth );
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(如何计算从一个月开始到下个月结束的周数?我想几个例子可能会让你的问题更清楚。所以你想要完整周数(即周一-周日)上个月包含哪些内容?如果我们看2012年10月,这将是4,11月将是3,对吗?谢谢Korgen,但上个月返回4,因为10月从周一开始有5周检查我的更改…这将提供上个月开始的周数(即上个月的周一数)第一个想法是,你只想计算完整的周数,但显然你也想要只开始的周数?!感谢anubhava,10月返回4周,但10月从周一开始有5周现在检查编辑。从你的问题看,你不清楚2012年10月是想要4周还是5周。上个月的周数从f开始rom星期一,本月是11月,10月是上个月,从10月的星期一开始有5个星期+1不是解决方案,因为它在大多数情况下不起作用
在大多数情况下不起作用
:你能告诉我一个具体的例子,当这个代码不起作用时吗?仅供参考,非常麻烦的旧日期-t现在,诸如和
之类的ime类被java 8及更高版本中内置的类所取代。请参阅。java.text.simpleDataFormat
long weeks = ChronoUnit.WEEKS.between( firstOfThisMonth , firstOfNextMonth );
LocalDate firstMondayOfThisMonth = ld.with( TemporalAdjusters.firstInMonth( DayOfWeek.MONDAY ) ); LocalDate firstMondayOfNextMonth = ld.plusMonths( 1 ).with( TemporalAdjusters.firstInMonth( DayOfWeek.MONDAY ) ); long weeks = ChronoUnit.WEEKS.between( firstMondayOfThisMonth , firstMondayOfNextMonth );