计算给定日期的后一天日期

问题描述:程序接受三个整数y、m、d作为输入参数,分别代表年、月、日;输入日期范围为1700年1月1日至2100年12月31日,超出范围或无效的输入给出错误提示;根据输入计算指定日期的后一天日期,输出后一天的年、月、日。

用到SimpleDateFormat ,Calendar ,Date类

package softTest;

import java.text.SimpleDateFormat;
import java.util.*;

public class Time {

	/**
	 * author hanhexin
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int y = 0;
		int m = 0;
		int d = 0;
		while (true) {
			System.out.print("年分:");
			y = sc.nextInt();//输入年
			System.out.print("月分:");
			m = sc.nextInt();//输入月
			System.out.print("日:");
			d = sc.nextInt();//输入日
			if (y < 1700 || y > 2100) {
				System.out.println("输入年数不在1700--2100之间,请重新输入");
				continue;
			}


			if (m > 12 || m < 1) {
				System.out.println("输入月数不在1--12之间,请重新输入");
				continue;
			}
			
			// 1 3 5 78 10 12
			if (m == 4 || m == 6 || m == 9 || m == 11) {
				if (d > 30 || d < 1) {
					System.out.println("4,6,9,,11日数应在1--30之间,请重新输入");
					continue;
				}
			} else if (m == 2) {
				if ((y % 4 == 0 && y % 100 != 00) || (y % 400 == 0)) {
					if (d > 29 || d < 1) {
						System.out.println("2月闰年最多29天,请重新输入");
						continue;
					}

				}else {
					if (d > 28 || d < 1) {
						System.out.println("2月非闰年最多28天,请重新输入");
						continue;
					}
				}
			}else {
				if (d > 31 || d < 1) {
					System.out.println("月最多31天,请重新输入");
					continue;
				}
			}
			break;
		}
		
		//格式化输出日期
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Calendar date = Calendar.getInstance();
		//System.out.println("m=" + m);
		
		//将给定的日历字段设置为给定值。
		date.set(Calendar.YEAR, y);
		date.set(Calendar.MONTH, m -1);//一年中的第一个月是 JANUARY,它为 0,第m月值为m-1
		date.set(Calendar.DAY_OF_MONTH, d);//一年中第一天的值为 1 

		/*两种 天数+1(明天)的方法*/
		//后一个参数为1,表示+1即明天;参数为-1,表示-1即昨天 add,roll方法效果一样
		
		//date.add(date.DAY_OF_YEAR, -1);//天数+1
		date.roll(date.DAY_OF_YEAR, 1);//天数+1
		
		Date dd = date.getTime();
		System.out.println(df.format(dd));
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值