.编写程序,让用户从输入对话框(JOptionPane. showInputDialog()方法)按yyyy-MM-dd格式输入两个日期,判断两个日期的大小关系,以及两个日期的间隔天数并输出。

题目;
.编写程序,让用户从输入对话框(JOptionPane. showInputDialog()方法)按yyyy

分析(以JDK8.0之前的Date为例)

First:日期的解析:文本–>日期;

总体上需要使用到日期的解析:文本–>日期;
从键盘输入格式要求的字符串,然后调用parse(string source)解析出一个Date对象的日期;
如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(message);
String message = JOptionPane.showInputDialog("请按照yyyy-MM-dd输入第一个日期");

Secend:解决用户日期格式输入的不对问题

字符串转换日期的问题解决了,接下来就是如何解决处理用户日期格式输入的不对问题
因为:Date date1 = sdf.parse(message);会在用户输入的日期格式不对时抛出异常ParseException:所以我们可以在catch块中处理问题;再加一个while循环直到用户输入的日期格式对了之后,才向下进行
如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String message;
        Date date1 = null, date2 = null;
        boolean sign = true;
        message = JOptionPane.showInputDialog("请按照yyyy-MM-dd输入第一个日期");
        while (sign) {
            try {
                date1 = sdf.parse(message);
                sign = false;
            } catch (ParseException e) {
                message = JOptionPane.showInputDialog("刚刚输入格式错误,请按照yyyy-MM-dd输入第一个日期");
            }
        }

日期二的输入与输出也一样处理;

Three:比较大小

采用时间戳比较大小:
调用日期的getTime()来获取时间戳:
如果date1的时间戳大于date2的时间戳说明:date1的日期晚
反之反过来

 if (date1.getTime() - date2.getTime() > 0) {
            System.out.print("date2(日期二)比date1(日期一)早"+" ");
        } else {
            System.out.print("date1(日期一)比date2(日期二)早"+" ");
        }

Four:求出两个日期间的天数差:

同样采用时间戳,调用日期的getTime()来获取时间戳:
应为我们的日期格式为yyyy-MM-dd没有指明具体时间:默认为00:00:00
所以不需要在后面加一了:如下:

int long=Math.abs((((date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24)))

最终代码实现

import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDate {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String message;
        Date date1 = null, date2 = null;
        boolean sign = true;
        message = JOptionPane.showInputDialog("请按照yyyy-MM-dd输入第一个日期");
        while (sign) {
            try {
                date1 = sdf.parse(message);
                sign = false;
            } catch (ParseException e) {
                message = JOptionPane.showInputDialog("刚刚输入格式错误,请按照yyyy-MM-dd输入第一个日期");
            }
        }
        String message1;
        message1 = JOptionPane.showInputDialog("请按照yyyy-MM-dd输入第二个日期");
        sign = true;
        while (sign) {
            try {
                date2 = sdf.parse(message1);
                sign = false;
            } catch (ParseException e) {
                message1 = JOptionPane.showInputDialog("刚刚输入格式错误,请按照yyyy-MM-dd输入第二个日期");
            }
        }
        if (date1.getTime() - date2.getTime() > 0) {
            System.out.println("date2(日期二)比date1(日期一)早" + "二者相隔天数为:" + Math.abs((((date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24))));
        } else {
            System.out.println("date1(日期一)比date2(日期二)早"+ "二者相隔天数为:" + Math.abs((((date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24))));
        }
    }

}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值