当前位置 主页 > 网站技术 > 代码类 >

    Java使用DateTimeFormatter实现格式化时间

    栏目:代码类 时间:2020-01-12 21:07

    用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间.用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);
     }
    }