计算数组中的周末天数记录

时间:2011-01-10 14:19:35

标签: java

我有一个字符串数组,其中包含从CSV文件中读取的日期 现在我想计算该阵列中的周末天数。但是在我的数组中有一些日期是重复的。这里显示了我的数组中包含的部分数据。

  

2010/12/2
  12/3/2010
  12/5/2010
  12/10/2010
  12/5/2010
  二○一○年十二月一十三日
  12/14/2010
  12/12/2010

在此数据集 12/5/2010是星期日(但有两条记录)& 12/12/2010是星期六(有一条记录)。在输出中,我想使用 java 打印此数组中的周末天数。与此示例相比, 答案应为2

FileInputStream fis=new FileInputStream("c:/cdr2.csv");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader bf = new BufferedReader(isr);
while (bf.ready()) {
    String line = bf.readLine();
    String[] values=line.split(",");
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/d/yyyy");
    Date date = simpleDateFormat.parse(values[2]);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
}

3 个答案:

答案 0 :(得分:3)

首先,您需要编写一个方法来确定给定的Date是否是周末:

public static boolean isWeekend(Date date) {
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
  return dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY;
}

然后,您需要定义DateFormat,以便将日期String解析为java.util.Date。最后,您可以使用Set来确保您找到的每个周末都不会重复:

public static void main(String[] args) throws ParseException {
  DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
  String[] dates = { "12/2/2010", "12/3/2010", "12/5/2010", "12/10/2010", "12/5/2010", "12/13/2010", "12/14/2010", "12/12/2010" };
  Set<String> weekends = new HashSet<String>();
  for (String dt : dates) {
    Date date = dateFormat.parse(dt);
    if (isWeekend(date)) {
      weekends.add(dt);
    }
  }
  System.out.println("There are " + weekends.size() + " distinct weekends."); // 2
}

答案 1 :(得分:1)

我会说你需要首先删除重复项,然后检查哪些是周末:

Set<String> set = new HashSet<String>( Arrays.asList(yourArrayOfDateStrings) );
DateFormat df = new SimpleDateFormat(yourDatePattern);
Calendar calendar = Calendar.getInstance();
int weekendDays = 0;
for (String dateString : set) {
    calendar.setTime( df.parse(dateString) );
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
        weekendDays++;
    }
}

答案 2 :(得分:1)

我永远不会使用java日期! 我同意Costi Ciudatu,使用Set删除重复项。

:)请使用JodaTime

向您发送代码
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
import org.joda.time.DateTimeField;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class Dates
{
    static String[] localTestDate = new String[] {"12/2/2010", "12/3/2010", "12/5/2010", "12/10/2010", "12/5/2010", "12/13/2010", "12/14/2010", "12/12/2010"};

    static DateTimeFormatter dateFactory = DateTimeFormat.forPattern("MM/d/yyyy");

    public static void main(String[] args)
    {
//      final Set<DateTime> uniqueDates = generateUniqueDates(localTestDate);

        final Set<DateTime> uniqueDates = generateUniqueDates(readCommonSeparatedFile(args[0]));


        int numberOfWeekendDates = 0;
        for(DateTime date : uniqueDates)
        {
            if(isWeekend(date)) numberOfWeekendDates++;
        }

        System.out.println("There are " + numberOfWeekendDates  + " weekend days in your list.");
    }

    private static boolean isWeekend(DateTime dateTime)
    {
        return (DateTimeConstants.SATURDAY == dateTime.dayOfWeek().get() || DateTimeConstants.SUNDAY == dateTime.dayOfWeek().get());
    }

    private static String[] readCommonSeparatedFile(final String fileName)
    {
        FileInputStream fileInputStream = null;

        String[] result = null;

        try
        {
            fileInputStream = new FileInputStream(fileName);

            final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));

            while (bufferedReader.ready())
            {
                String line = bufferedReader.readLine();

                result = line.split(",");
            }
        }
        catch (IOException e)
        {
            //log error some where

            throw new RuntimeException("aw, snap!");
        }

        return result;
    }

    private static Set<DateTime> generateUniqueDates(final String[] dates)
    {
        final Set<DateTime> dateTimes = new HashSet<DateTime>();

        for (String date : dates)
        {
            dateTimes.add(dateFactory.parseDateTime(date).toDateTime());
        }

        return dateTimes;
    }
}