(Java)错误的日期计算输出

时间:2015-03-15 09:55:28

标签: java date

这是我在这里的第一篇文章。我为我的语法道歉。 题 从这段代码中,我想找到从开始日期到结束日期的周末日和工作日,例如12/03/2014到23/03/2014。输入为xx / xx / 2015至xx / xx-2015时。它没有任何问题,但如果输入为xx / xx / 2014到xx / xx / 2014,则会显示错误的日期。

实施例

12/03/2014至23/03/2014

输出

3月12日星期二:错误的日期

3月23日星期六:错误的日期

例2

2015年11月3日至2015年3月22日

3月11日星期三:好的

3月22日星期日:好的

我把它发给了我的朋友,他说它运行正常。是因为jdk版本? 我用java jdk1.8.0_40但我的朋友是jdk1.8.0_31。



import java.util.Scanner;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.GregorianCalendar;

class getDate
{
	public String S_duration;
	public String E_duration;
	
	public getDate()
	{}
	public void Setstart(String start)
	{
		S_duration=start;
		System.out.println("Start duration: "+S_duration);
		
	}
	public void Setend(String end)
	{
		E_duration=end;
		System.out.println("End duration: "+E_duration);
		
	
	}
	public void date_cal()throws Exception
	{	
	 int count1=0;
	 int count2=0;
	 boolean i=false;
	
		SimpleDateFormat parser = new SimpleDateFormat("dd/MM/yyyy");
		
 
		Date Sdate = parser.parse(S_duration);
		Date Edate = parser.parse(E_duration);	
		
		Calendar s = GregorianCalendar.getInstance();
		Calendar e = GregorianCalendar.getInstance();
		s.setTime(Sdate);
		e.setTime(Edate);
		Date SD=s.getTime();
		Date ED=e.getTime();
		
		//System.out.println("\nStart Duration(DD/MM/YYYY): "+s.get(Calendar.DAY_OF_WEEK)+"/"+s.get(Calendar.DATE));
		System.out.println("\nStart Duration(DD/MM/YYYY): "+SD+"/"+s.get(Calendar.YEAR));
		System.out.println("\nEnd Duration(DD/MM/YYYY): "+ED+"/"+e.get(Calendar.YEAR));
		
		while (!i)
		{
				 int day = s.get(Calendar.DAY_OF_WEEK);
				 if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) {
			 
					count1++;
					System.out.println("count1: "+count1);
				 }
				 else
				 {
					 count2++;
					 System.out.println("count2 "+count2);
				 }
				 if(s.equals(e))
				 {
						i=true;
				 }

					 
				 s.add(Calendar.DAY_OF_YEAR, 1);
		}
		
		System.out.println("\nMon-Fri: "+count2);
		System.out.println("\nSat-Sun: "+count1);
		System.out.println("\n*************************************************************************");
	}

}

public class Datecalculation {
    public static void main(String[] args)throws Exception {
		String d1,d2;
		int mode=0;
		 getDate datecal=new getDate();
		
		while(mode==0)
		{
		System.out.println("\nPlease enter Start Duration(DD/MM/YYYY):");
		Scanner in = new Scanner(System.in);      
		d1=in.nextLine();
		
		datecal.Setstart(d1);
		System.out.println("\nPlease enter End Duration(DD/MM/YYYY):");	
		Scanner in2 = new Scanner(System.in);      
		d2=in2.nextLine();
		
		datecal.Setend(d2);
		datecal.date_cal();
		System.out.println("\nExit?(YES=1/NO=0)");
		mode=in.nextInt();
		}
		
	}
}




1 个答案:

答案 0 :(得分:0)

JDK通常不会创建此类错误。 我在1.8.0_40(同样你遇到问题)上运行它并产生正确的结果:

Mon-Fri: 8

Sat-Sun: 4