使用DateTimeFormatter格式化输入的日期时间

本文介绍了如何使用DateTimeFormatter根据用户输入的日期时间(如:2020-1-11 12:22)进行格式化。讨论了时间的常见格式、微信显示样式,以及特殊情况的处理,如1号的前一天显示为昨天。并展示了程序的基本流程,包括输入处理、格式化和输出。

使用DateTimeFormatter格式化输入的日期时间

要求:

用DateTimeFormatter实现: 用扫描器获取输入的时间(年月日时分),这个时间的格式是常用的格式,然后格式化这个时间,把格式化的时间输出到控制台,可以在控制台重复输入时间.格式化的时间参考企业微信聊天记录的展示时间

分析:

  • 1.时间的常用格式为:

xxxx-xx-xx xx:xx
xxxx/xx/xx xx:xx
xxxx.xx.xx xx:xx
等格式

  • 2.微信显式时间格式为:

今天显式: 00:01 - 23:59 ;
昨天显式: 昨天 01:01 ;
前天显式: 周几 02:02
往前推一周都显式: 周几 02:02 ;
时间再往前推只显示: 几月几日 02:02
不同年则显式: 几年几月几日 02:02
也可考虑写一个明天显式: 明天 02:02
其余时间显式: 几月几日 02:02

  • 3.考虑特殊情况下的日期:

比如当前天是1号
则上个月的最后一天是昨天
往前推一周则显式:星期几 02:02
如果当前天不大于7号
则向前推一周到了上个月
也要考虑将其转换为星期

  • 4.先输入一个时间,再对这个时间使用DateTimeFormatter进行格式化

比如:
输入: 2020-1-11 12:22
则格式化结果为:
下午 12:22

代码实现

程序开始:
package hrkj.chapter7.dateTimeFormatter.Test1;

/**
 * 程序开始入口 <br>
 * 2020年1月9日下午7:10:04
 * 
 * @author wcf
 * @version 1.0
 */
public class Test {
   
   
	/**
	 * 程序入口
	 * 
	 * @param args 入口参数
	 */
	public static void main(String[] args) {
   
   
		// 程序开始运行
		DateTimeFormatterTest.inoutDateTime();
	}
}
日期时间等需要用到的正则表达式:
package hrkj.chapter7.dateTimeFormatter.Test1;

/**
 * 日期时间的正则表达式 <br>
 * 2020年1月9日下午7:25:11
 * 
 * @author wcf
 * @version 1.0
 */
public enum Regex {
   
   
	/**
	 * 匹配闰年
	 */
	LEEP_YEAR("((\\d{2}(0[48]|[2468][048]|[13579][26]))|((0[48]|[2468][048]|[13579][26])00))[-\\/\\.]0?2[-\\/\\.]29"),
	/**
	 * 匹配平年
	 */
	COMMON_YEAR("(\\d{3}[1-9]|\\d{2}[1-9]\\d|\\d[1-9]\\d{2}|[1-9]\\d{3})[-\\/\\.]((0?[13578]|1[02])[-\\/\\.](0?[1-9]|[12]\\d|3[01])|((0?[469]|11)[-\\/\\.](0?[1-9]|[12]\\d|30))|(0?2[-\\/\\.](0?[1-9]|1\\d|2[0-8])))"),
	/**
	 * 匹配时间
	 */
	TIME(" ([01]?\\d|2[0-3]):[0-5]?\\d"),
	/**
	 * 退出程序
	 */
	EXIT("exit|退出");

	/**
	 * 正则
	 */
	private final String str;

	/**
	 * 有参构造器
	 * 
	 * @param string 正则
	 */
	private Regex(String string) {
   
   
		this.str = string;
	}

	/**
	 * 获取正则
	 * 
	 * @return 正则
	 */
	public String getStr() {
   
   
		return str;
	}
}
提示信息:
package hrkj.chapter7.dateTimeFormatter.Test1;

/**
 * 提示信息 <br>
 * 2020年1月9日下午7:25:53
 * 
 * @author wcf
 * @version 1.0
 */
public enum Hint {
   
   
	/**
	 * 请输入日期时间
	 */
	INPUT_DATE_TIME("请输入日期时间:"),
	/**
	 * 日期时间格式
	 */
	DATETIMEFORMAT("常用格式:xxxx-xx-xx xx:xx\n\t xxxx/xx/xx xx:xx\n\t xxxx.xx.xx xx:xx"),
	/**
	 * 日期错误
	 */
	INVOKE_DATE("日期错误"),
	/**
	 * 时间错误
	 */
	INVOKE_TIME("时间错误"),
	/**
	 * 日期时间错误
	 */
	INVOKE_DATE_TIME("日期时间错误!"),
	/**
	 * 继续或退出
	 */
	CONTINUE_OR_QUIT("exit:程序退出\n请输入:"),
	/**
	 * 程序结束
	 */
	END_OF_PROGRAM("退出成功,程序结束!");

	/**
	 * 提示
	 */
	private final String str;

	/**
	 * 有参构造器
	 * 
	 * @param str 提示
	 */
	private Hint(String str) {
   
   
		this.str = str;
	}

	/**
	 * 获取提示
	 */
	public void println() {
   
   
		System.out.println(str);
	}

}

日期时间格式化的模板字符串:
package hrkj.chapter7.dateTimeFormatter.Test1;

/**
 * 日期时间格式化的模板字符串 <br>
 * 2019年3月1日下午7:17:19
 * 
 * @author wcf
 * @version 1.0
 */
public enum Pattern {
   
   
	
	/**
	 * 上下午时分
	 */
	TIME("a HH:mm"),
	/**
	 * 昨天 时分
	 */
	YESTERDAY("昨天 HH:mm"),
	/**
	 * 明天 时分
	 */
	TOMORROW("明天 HH:mm"),
	/**
	 * 星期 时分
	 */
	WEEK_TIME("E HH:mm"),
	/**
	 * 月日时分
	 */
	MONTH_DAY_TIME("M月d日 HH:mm"),
	/**
	 * 年月日时分
	 */
	YEAR_MONTH_DAY_TIME("y年M月d日 HH:mm");

	/**
	 * 显式模式
	 */
	private final String str;

	/**
	 * 有参数构造器
	 * 
	 * @param str 模式
	 */
	private Pattern(String str) {
   
   
		this.str = str;
	}

	/**
	 * 获取显式模式
	 * 
	 * @return 显式模式
	 */
	public String getStr() {
   
   
		return str;
	}

}
输入日期时间进行处理:
package hrkj.chapter7.dateTimeFormatter.Test1;

import java.util.Scanner;

/**
 * 输入日期时间进行处理 <br>
 * 2020年1月9日下午7:09:31
 * 
 * @author wcf
 * @version 1.0
 */
public class DateTimeFormatterTest {
   
   

	/**
	 * 闰年正则
	 */
	private final static String LEEP_YEAR = Regex.LEEP_YEAR.getStr();
	/**
	 * 平年正则
	 */
	private final static String COMMON_YEAR = Regex.COMMON_YEAR.getStr(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值