五十道编程小题目 --- 14 java


【程序14】 
题目:输入某年某月某日,判断这一天是这一年的第几天? 
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,判断闰年

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Scanner;

public class Test14 {
	
	static int[] a = {1,3,5,7,8,10,12};
	static int[] b = {4,6,9,11};
	
	private static List<int[]> day_31 = Arrays.asList(a);
	private static List<int[]> day_30 = Arrays.asList(b);
	
	//计算天数
	public static int dayCount(int y,int m, int d){
		
		if(y<0 || m<0 || d<0 || m>12 || d>31){
			return -1;
		}
		
		Calendar c = Calendar.getInstance();
		c.set(y, m-1, d);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
		System.out.println("输入日期为:" + sdf.format(c.getTime()));  //格式化时间
	
		
		int yy = c.get(Calendar.YEAR);   // 得到年份
		int mm = c.get(Calendar.MONTH)+1;  //得到月份,月份从0开始算,即一月是0
		int dd = c.get(Calendar.DAY_OF_MONTH); //得到天
		
		int day_sum =0;
		if( (yy%4 == 0 && yy%100 != 0) || yy%100 == 0 ){  //判断闰年
			
			for(int i=1; i<mm; i++){        //月累加
				if(day_31.contains(i)){
					day_sum += 31;
				}else if(day_30.contains(i)){
					day_sum +=30;
				}else{
					day_sum +=29;
				}
			}
			
		}else{
			for(int i=1; i<mm; i++){    //月累加
				if(day_31.contains(i)){
					day_sum += 31;
				}else if(day_30.contains(i)){
					day_sum +=30;
				}else{
					day_sum +=28;
				}
			}
		}
		
		day_sum += dd;
		
		return day_sum;
		
		
	}
	
	
	public static void main(String[] args) {
		
		System.out.println("请输入年月日:");
		Scanner s = new Scanner(System.in);
		
		System.out.println("该日期为本年的第" + dayCount(s.nextInt(), s.nextInt(), s.nextInt()) + "天");
		
	}

}
输出结果为:

请输入年月日:
2015
2
12
输入日期为:2015-02-12 
该日期为本年的第40天




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值