java 获取月份 几周_java – 我想在特定的月份获得几周的时间

Calendar类的WEEK_OF_YEAR属性可能对您有用。参考:

Calendar class

创建一个新的日期,将是一个月的第一天。得到这一天的一周的这个星期,让你说起点价值。

创建一个新的日期,这将是给定月份的最后一天。获得今年的一周,所以现在你得到了最终的价值。

现在结束 – 开始1应该是你想要的。

当本周重叠到另一年或类似时,您可能需要处理一些角落。但我认为一旦你得到这个权利,你可以用简单的逻辑来做到这一点。

这里是简单的示例代码。我认为你可以使它成为功能,并通过任何你想要的。

Calendar cal = Calendar.getInstance();

cal.set(Calendar.YEAR, 2013);

cal.set(Calendar.MONTH, 1);

cal.set(Calendar.DAY_OF_MONTH, 1);

int start = cal.get(Calendar.WEEK_OF_YEAR);

Log.d("BLA BLA", "Value is " + start);

cal.set(Calendar.YEAR, 2013);

cal.set(Calendar.MONTH, 1);

cal.set(Calendar.DAY_OF_MONTH, 28);

int end = cal.get(Calendar.WEEK_OF_YEAR);

//Above line will not work for December Month, use following line for this

int end = isDecember?53:cal.get(Calendar.WEEK_OF_YEAR);

Log.d("BLA BLA", "Value is " + end);

Log.d("BLA BLA", "Num weeks:: " + (end - start +1 ));

对于角落案例:

拐角案仅在Januaray的月份(例如2010年1月,2000年1月),在大多数情况下,大部分时间都是上一周的最后一周,所以起始值将为52,结束值为5.当这发生检查是否,

if(start > end) {

numweeks = end + 1;

}

P.S:把它放到不同的测试输入上。让我知道如果我可以改善它,一旦你发现任何错误。

甚至更简单的解决方案:

Calendar cal = Calendar.getInstance();

for(int i = 0 ; i < 11;i++){

cal.set(Calendar.YEAR, 2013);

cal.set(Calendar.DAY_OF_MONTH, 1);

cal.set(Calendar.MONTH, i);

int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

Log.d("LOG","max week number" + maxWeeknumber);

}

01-22 01:49:03.591: D/LOG(573): max week number5

01-22 01:49:03.602: D/LOG(573): max week number5

01-22 01:49:03.602: D/LOG(573): max week number6

01-22 01:49:03.671: D/LOG(573): max week number5

01-22 01:49:03.671: D/LOG(573): max week number5

01-22 01:49:03.671: D/LOG(573): max week number6

01-22 01:49:03.681: D/LOG(573): max week number5

01-22 01:49:03.691: D/LOG(573): max week number5

01-22 01:49:03.691: D/LOG(573): max week number5

01-22 01:49:03.711: D/LOG(573): max week number5

01-22 01:49:03.711: D/LOG(573): max week number5

简单的解决方案适用于拐角情况:

Calendar cal = Calendar.getInstance();

for(int i = 0 ; i < 11;i++){

cal.set(Calendar.YEAR, 2010);

cal.set(Calendar.DAY_OF_MONTH, 1);

cal.set(Calendar.MONTH, i);

int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

// Month value starts from 0 to 11 for Jan to Dec

Log.d("LOG","For Month :: "+ i + " Num Week :: " + maxWeeknumber);

}

日志:

01-22 01:59:35.841: D/LOG(629): For Month :: 0 Num Week :: 6

01-22 01:59:35.841: D/LOG(629): For Month :: 1 Num Week :: 5

01-22 01:59:35.841: D/LOG(629): For Month :: 2 Num Week :: 5

01-22 01:59:35.841: D/LOG(629): For Month :: 3 Num Week :: 5

01-22 01:59:35.841: D/LOG(629): For Month :: 4 Num Week :: 6

01-22 01:59:35.852: D/LOG(629): For Month :: 5 Num Week :: 5

01-22 01:59:35.871: D/LOG(629): For Month :: 6 Num Week :: 5

01-22 01:59:35.871: D/LOG(629): For Month :: 7 Num Week :: 5

01-22 01:59:35.871: D/LOG(629): For Month :: 8 Num Week :: 5

01-22 01:59:35.871: D/LOG(629): For Month :: 9 Num Week :: 6

01-22 01:59:35.871: D/LOG(629): For Month :: 10 Num Week :: 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值