通过DateTimeFormatter格式器格式化日期时间
题目要求:
用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间.
知识需求
- java基础知识
- Scanner扫描器
- 普通类,枚举类
- final修饰符
- 正则表达式
- DateTimeFormatter格式器(格式化及解析知识)
- 包装类,打印对象
- 一系列的常用方法等
实现思路及简易步骤
- 获取扫描器,通过扫描器获取输入的时间(年月日时分)
- 创建一个Notice类(提示信息类),用于存取日期时间格式化期间要用到的完整的提示信息(如普通类,枚举类)
- 创建一个Regex枚举类,用于匹配日期时间的正则表达式,把传入的日期时间匹配相对应的正则表达式,将匹配好的日期时间传入日期时间工具类的获取日期时间的方法中,然后进行具体的格式化实现
- 这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间.
- 需要实现:
同年:
同月:月日+时分
今天:上午/下午+时分
明天:明天+时分
昨天:昨天+时分
今天之前(包括今天)的一周内:星期+时分
不同月时:
上个月(通过调整时间进行测试):
今天:上午/下午+时分
明天:明天+时分
昨天:昨天+时分
今天之前(包括今天)的一周内:星期+时分
本月:月日+时分
下个月(通过调整时间进行测试):
明天:明天+时分
其他月:月日+时分
不同年:年月日+时分
程序测试情景如下:
欢迎使用日期时间格式器!
若退出程序,请输入'exit'或'退出' !
请参考企业微信聊天记录的展示时间,输入一个合法的时间:
合法时间格式为日期格式为yyyy.MM.dd HH:mm
形如:2020.1.10 19:19
或日期格式为yyyy-MM-dd HH:mm
形如:2020-1-10 19:19
或日期格式为yyyy/MM/dd HH:mm
形如:2020/1/10 19:19
请输入:
2020/1/11 19:19
格式化后日期时间为:
下午 19:19
若退出程序,请输入'exit'或'退出' !
2020/1/12 19:19
格式化后日期时间为:
明天 19:19
若退出程序,请输入'exit'或'退出' !
2020/1/10 19:19
格式化后日期时间为:
昨天 19:19
若退出程序,请输入'exit'或'退出' !
2020/1/9 19:19
格式化后日期时间为:
周四 19:19
若退出程序,请输入'exit'或'退出' !
2020/1/3 19:19
格式化后日期时间为:
1月3日 19:19
若退出程序,请输入'exit'或'退出' !
2020/2/29 19:19
格式化后日期时间为:
2月29日 19:19
若退出程序,请输入'exit'或'退出' !
2019/2/28 19:19
格式化后日期时间为:
2019年2月28日 19:19
若退出程序,请输入'exit'或'退出' !
如果需要其他情形,请自行测试!
实现代码如下:
测试类
package datetimeformatter;
/**
* 日期时间测试类<br>
* 2020年1月10日 上午9:43:16
*
* @author zcf
* @version 1.0
*/
public class Test {
/**
* 程序入口
*
* @param args 入口参数
*/
public static void main(String[] args) {
/**
* 进入时间格式器
*/
DateTime.startIn();
}
}
日期时间类
package datetimeformatter;
import java.util.Scanner;
/**
* 日期时间类<br>
* 2020年1月10日 上午9:44:13
*
* @author zcf
* @version 1.0
*/
public class DateTime {
/**
* 闰年日期正则
*/
private static final String LEEP_YEAR = Regex.LEEP_YEAR.getDesc();
/**
* 平年日期正则
*/
private static final String COMMON_YEAR = Regex.COMMON_YEAR.getDesc();
/**
* 时间正则
*/
private static final String TIME = Regex.TIME.getDesc();
/**
* 私有构造器 不能创建实例
*/
private DateTime() {
}
/**
* 时间格式器,开始方法
*/
public static void startIn() {
// 进入程序的提示语
Notice.inTip();
// 获取扫描器
Scanner sc = new Scanner(System.in);
// 判断是否有下一行输入
wh