java 将日期按周分组_Java:如何在相应的一周内对所有Java日期进行分组?

您只需使用自定义Comparator对日期列表进行排序即可.下面的例子按年份排序日期,然后按日期排序,不知道你是否想要第二部分,但这是一个很好的演示……

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Collections;

import java.util.Comparator;

import java.util.Date;

import java.util.List;

public class Test {

public static void main(String[] args) {

try {

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

List dates = new ArrayList(25);

dates.add(sdf.parse("04/01/2015"));

dates.add(sdf.parse("04/02/2015"));

dates.add(sdf.parse("04/03/2015"));

dates.add(sdf.parse("04/04/2015"));

dates.add(sdf.parse("04/05/2015"));

dates.add(sdf.parse("04/06/2015"));

dates.add(sdf.parse("04/07/2015"));

dates.add(sdf.parse("04/08/2015"));

dates.add(sdf.parse("04/09/2015"));

int week = 0;

int woy = -1;

Collections.sort(dates,new WeekComparator());

for (Date date : dates) {

if (woy != getWeekOfYear(date)) {

woy = getWeekOfYear(date);

week++;

System.out.println("Week " + week + ":");

}

System.out.println(date);

}

} catch (ParseException exp) {

exp.printStackTrace();

}

}

public static class WeekComparator implements Comparator {

@Override

public int compare(Date o1,Date o2) {

int result = getWeekOfYear(o1) - getWeekOfYear(o2);

if (result == 0) {

result = o1.compareTo(o2);

}

return result;

}

}

protected static int getWeekOfYear(Date date) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

return cal.get(Calendar.WEEK_OF_YEAR);

}

}

哪个输出

Week 1:

Wed Apr 01 00:00:00 EST 2015

Thu Apr 02 00:00:00 EST 2015

Fri Apr 03 00:00:00 EST 2015

Sat Apr 04 00:00:00 EST 2015

Week 2:

Sun Apr 05 00:00:00 EST 2015

Mon Apr 06 00:00:00 EST 2015

Tue Apr 07 00:00:00 EST 2015

Wed Apr 08 00:00:00 EST 2015

Thu Apr 09 00:00:00 EST 2015

Java 8 Time API

仅仅因为我需要练习……

import java.text.SimpleDateFormat;

import java.time.LocalDate;

import java.time.format.DateTimeFormatter;

import java.time.temporal.WeekFields;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Locale;

public class Test {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yyyy");

List dates = new ArrayList(25);

dates.add(LocalDate.parse("04/01/2015",dtf));

dates.add(LocalDate.parse("04/02/2015",dtf));

dates.add(LocalDate.parse("04/03/2015",dtf));

dates.add(LocalDate.parse("04/04/2015",dtf));

dates.add(LocalDate.parse("04/05/2015",dtf));

dates.add(LocalDate.parse("04/06/2015",dtf));

dates.add(LocalDate.parse("04/07/2015",dtf));

dates.add(LocalDate.parse("04/08/2015",dtf));

dates.add(LocalDate.parse("04/09/2015",dtf));

int week = 0;

int woy = -1;

Collections.sort(dates,new WeekComparator());

for (LocalDate date : dates) {

if (woy != getWeekOfYear(date)) {

woy = getWeekOfYear(date);

week++;

System.out.println("Week " + week + ":");

}

System.out.println(date);

}

}

public static class WeekComparator implements Comparator {

@Override

public int compare(LocalDate o1,LocalDate o2) {

int result = getWeekOfYear(o1) - getWeekOfYear(o2);

if (result == 0) {

result = o1.compareTo(o2);

}

return result;

}

}

protected static int getWeekOfYear(LocalDate date) {

WeekFields wf = WeekFields.of(Locale.getDefault());

return date.get(wf.weekOfYear());

}

}

哪个输出

Week 1:

2015-04-01

2015-04-02

2015-04-03

2015-04-04

Week 2:

2015-04-05

2015-04-06

2015-04-07

2015-04-08

2015-04-09

在任何一种情况下,您都可以将每个日期映射到按周键入的地图,但这取决于您

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值