Java:创建一个程序来计算星期五13周,给出一周,一个月,一个日期和星期几

时间:2012-11-11 20:34:07

标签: java

如果用户在Java中输入年,月,星期几和日期,我正在尝试编写一个计算给定年份中星期五的数量的程序。我知道我需要使用数组,但我不知道如何。星期五有一个月的第13个星期是这个月的第一天是星期天。我是一个java初学者,所以请不要给我超级深入的方式,但最简单,最容易理解。我坚持的部分是逐月移动。假设我们是3月1日。这是星期四。本月13日显然没有firday,但我怎么能在4月到5月之间等到12月,增加日期,星期和月,每个月检查第一天是否是星期日。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

  1. 获取日历对象,其中第13天和第1个月为给定年份的1。

        int year = 2012; //user input
        String dateString = "01/13/"+year;
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        Date date = dateFormat.parse(dateString);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
    
  2. 计算是否是星期五,在循环中一次添加一个月。

        int counter = 0;
        int months = 0;
        while(months++ <= 12){
           if(Calendar.FRIDAY == cal.get(Calendar.DAY_OF_WEEK)){
              counter++;
           }
           cal.add(Calendar.MONTH, 1);
        }
    
      System.out.println("Number of Fridays on 13th = "+ counter);      
    

答案 1 :(得分:0)

我不会给你一个直接的答案,你应该在阅读之后将其中的大部分内容解读出来! 我会检查一下:http://www.java-examples.com/display-day-week-using-java-calendar 然后你有办法将日期设置为字符串..然后你应该每个月进行循环检查day1 = sunday。

我希望这有帮助。给它一些测试并玩代码和循环,然后再回来再问:)

答案 2 :(得分:0)

像Marek Sebera建议的那样,JodaTime非常易于使用和学习。以下代码将打印从给定日期开始的一年中的所有第13个星期五:

DateTimeFormatter dateParser = DateTimeFormat.forPattern("yyyy-MM-dd");        
DateTime date = dateParser.parseDateTime("2001-03-10");                        
DateTime initDate = date;                                                      
date = date.withDayOfMonth(13); //reset to the 13 of the current month          
if (date.compareTo(initDate) == -1) //add a month if the start date was after 13 
    date=date.plusMonths(1);                                                   
while (date.getYear() == initDate.getYear()) {                                 
    date = date.plusMonths(1);                                                 
    if (date.getDayOfWeek() == DateTimeConstants.FRIDAY)                       
        System.out.println("date = " + date);                                  
}