DateTimeFormatter
提示:该文章的部分内容摘自廖雪峰微博,代码部分为自己测试内容
前言
使用旧的Date对象时,我们用**SimpleDateFormat**进行格式化显示。使用新的LocalDateTime或ZonedLocalDateTime时,我们要进行格式化显示,就要使用DateTimeFormatter。和SimpleDateFormat不同的是,DateTimeFormatter不但是不变对象,它还是线程安全的。
因为SimpleDateFormat不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。
而DateTimeFormatter可以只创建一个实例,到处引用。
创建DateTimeFormatter时,我们仍然通过传入格式化字符串实现:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
格式化字符串的使用方式与SimpleDateFormat完全一致。
另一种创建DateTimeFormatter的方法是,传入格式化字符串时,同时指定Locale:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, yyyy-MMMM-dd HH:mm", Locale.US);
这种方式可以按照Locale默认习惯格式化。
一、使用java类库
import java.time.format.DateTimeFormatter;
二、使用步骤
1.LocalDate转换
代码如下(示例):
//解析日期
String dateStr= "2016年10月25日";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//LocalDate练习
LocalDate date= LocalDate.parse(dateStr, formatter);
System.out.println(date);
String format1 = date.format(formatter);
System.out.println(format1);
2016-10-25
2016年10月25日
2.LocalDateTime 的转换
代码如下(示例):
//LocalDateTime练习
String dateTimeStr= "2016-10-25 12:00:00";
DateTimeFormatter formatter02 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime=LocalDateTime.parse(dateTimeStr,formatter02);
System.out.println(localDateTime);
String format = localDateTime.format(formatter02);
System.out.println(format);
2016-10-25T12:00
2016-10-25 12:00:00
## 3.一般常见的时间格式
这里采用的话呢可以使用枚举类也可以是接口(DateConstants)
代码如下(示例):
/** 默认的时间格式为"yyyy-MM-dd HH:mm:ss",若后续有其他需求,则可以另行添加 */
static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** 格式 "yyyy/MM/dd HH:mm:ss" */
static final String DEFAULT_DATE_FORMAT_2 = "yyyy/MM/dd HH:mm:ss";
/** 格式 "yyyy-MM-dd" */
static final String DATE_FORMAT = "yyyy-MM-dd";
static final String DATE_FORMAT_2 = "yyyy/MM/dd";
/** 格式 "yyyy-MM" */
static final String MONTH_FORMAT = "yyyy-MM";
static final String MONTH_FORMAT_2 = "yyyy/MM";
// 默认的时间格式为"yyyy/MM/dd HH:mm:ss",若后续有其他需求,则可以另行添加
static DateTimeFormatter defaultFormatter = DateTimeFormat.forPattern(DEFAULT_DATE_FORMAT);
// 当前日期标签,很多类似日志文件需要打时间标签
static final String DATE_MARK = "yyyyMMdd";
// 默认的时间格式
//private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
static final String HOUR_MINUTE = "HH:mm";
/**
* 默认的stringbuffer 长度,
* stringbuffer 的默认长度是16,
* 增长策略是每次增加16字节,
* so可以一次性申请100个字节,提交效率
*/
int DEFAULT_STRINGBUFFER_LENGTH = 100;
/** 响应状态: STATUS_OK = 1 */
static final int DB_INSERT_OK = 1;
/** 星期一 1 */
int MONDAY = 1;
int TUESDAY =2;
int WEDNESDAY = 3;
int THURSDAY = 4;
int FRIDAY = 5;
int ALLWEEK = 0;
// 公司名称
static final String COMPANY_NAME = "XXXXX";