用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间.用DateTimeFormatter实现,功能如下:
同年:
不同年:
同月:月日+上午/下午+时分
同年不同月:月日+时分
今天:上午/下午+时分
明天:明天+上午/下午+时分
昨天:昨天+上午/下午+时分
包括今天在内的一周内:星期+上午/下午+时分
首先看一下测试类:
package hrkj; import java.util.Scanner; /** * 日期时间测试类 * * @author 张林琛<br> * @date 2020/01/10 08:35:29 * @version 1.0 */ public class DateTimeTest { public static void main(String[] args) { // 获取Scanner扫描器 Scanner sc = new Scanner(System.in); // 程序开始提示语句 Hint.HINT_STAR.print(); // 程序退出提示语句 System.out.println(Order.ORDER_EXIT.getname()); while (sc.hasNextLine()) { String str = sc.nextLine(); // 判断是否为退出指令 if (Order.ORDER_EXIT.compare(str)) { Hint.HINT_END.print(); //如果退出,则关闭扫描器 sc.close(); break; // 判断输入的是否为空格或回车 } else if (str.equals(" ") || str.equals("" + "")) { Hint.BLANK_OR_ENTER.print(); } else { // 开始处理日期时间 DateTimeTool.dateTimeFormatter(str); } Hint.HINT_STAR.print(); System.out.println(Order.ORDER_EXIT.getname()); } } }
这里比较好的一点就是,在程序结束之前,会关闭扫描器,程序开始和程序结束,都会有提示语句:
请输入正确的时间,例如:
2020-01-10 10:10 2020.01.10 10:10 2020/01/10 10:10
退出请输入:[exit, 退出]
上面效果分别对应以下两行代码:
// 程序开始提示语句 Hint.HINT_STAR.print(); // 程序退出提示语句 System.out.println(Order.ORDER_EXIT.getname());
其中[exit, 退出]单独为第二行代码,与第一行代码效果拼接在一起,值得注意的是,Hint是一个枚举类,程序开始;运行期间和结尾的提示语句,都定义为枚举值,具体如下:
package hrkj; /** * 日期时间类的提示语句,用于提示错误信息 * * @author 张林琛<br> * @date 2020/01/10 08:39:27 * @version 1.0 */ public enum Hint { /** * 日期时间长度不合法 */ LENGTH_ILLEGAL("日期时间长度不合法,"), /** * 日期错误 */ HINT_DATE("日期输入错误,"), /** * 月份输入不合法 */ HINT_MONTH("月份输入不合法,"), /** * 大月只有31天 */ HINT_BIGMONTH("大月只有31天,"), /** * 小月只有30天 */ HINT_TINYMONTH("小月只有30天,"), /** * 平年2月只有28天 */ HINT_TINY_TWOMONTH("平年二月只有28天,"), /** * 闰年二月只有29天 */ HINT_BIG_TWOMONTH("闰年二月只有28天,"), /** * 时间错误 */ HINT_TIME("时间输入错误,"), /** * 输入空格或回车 */ BLANK_OR_ENTER("不能输入空格或直接回车,"), /** * 以空格分开日期和时间 */ DATE_BLANK_TIME("请以空格分割开日期和时间,"), /** * 开始提示语句 */ HINT_STAR("请输入正确的时间,例如:\n2020-01-10 10:10 2020.01.10 10:10 2020/01/10 10:10\n退出请输入:"), /** * 程序结束提示语句 */ HINT_END("程序结束,欢迎下次使用!"); // 定义实例变量 private final String name; /** * 单个参数构造器 * * @param name */ private Hint(String name) { this.name = name; } /** * 获取实例变量的值 * * @return name */ public String getName() { return name; } /** * 打印提示语句的方法 */ public void print() { System.out.print(name); } }