紧接着上篇文章Random和SimpleDateFormat的坑和最佳实践
为什么是线程安全的?
还是看源代码和注释说
* This class is immutable and thread-safe.
*
* @since 1.8
*/
public final class DateTimeFormatter {}
很明显,通过final关键字,做成了不可变类,类似String,不仅线程安全而且高效。
进行格式化的方法ofPattern()一直适用吗?
通常使用来说,我们可以通过
DateTimeFormatter formatter = ("yyyy-MM-dd HH:mm");
or
DateTimeFormatter formatter = ("E, yyyy-MMMM-dd HH:mm", );
or
DateTimeFormatter formatterTime = ("yyyy-MM-dd HH:mm:ss").withZone(("+8"));
以上,都是OK的,而且也是最长被用到的,但是不会一直正确,如下:
DateTimeFormatter DATE_TIME_FORMATTER = ("yyyyMMddHHmmssS");
LocalDateTime dt1 = ("20190510134643946", DATE_TIME_FORMATTER);
(dt1);
异常如下:
Exception in thread "main" : Text '20190510134643946' could not be parsed at index 0
at .parseResolved0(:1949)
at (:1851)
at (:492)
at .test28(:71)
at (:65)
那么该怎么做呢?
DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
// 解析date+time
.appendPattern("yyyyMMddHHmmss")
// 解析毫秒数
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
DateTimeFormatter中的常用转换
1. LocalDateTime 转化为Date
//将 转换为java8 的,默认时区为东8区
public static LocalDateTime dateConvertToLocalDateTime(Date date) {
return ().atOffset(("+8")).toLocalDateTime();
}
//将java8 的 转换为 ,默认时区为东8区
public static Date localDateTimeConvertToDate(LocalDateTime localDateTime) {
return ((("+8")));
}
2. LocalDateTime转秒级时间戳、转毫秒时间戳(此处容易入坑)
String updateTime = "2019-07-28 14:11:15";
DateTimeFormatter formatterTime = ("yyyy-MM-dd HH:mm:ss").withZone(("+8"));
LocalDateTime lastLDT = (updateTime, formatterTime);
//获取秒级
long last = (("+8"));
//获取毫秒级
long last = (("+8")).toEpochMilli();
3. LocalDateTime转换String
//时间转字符串格式化
DateTimeFormatter formatter = ("yyyyMMddHHmmssSSS");
String dateTime = (("+8")).format(formatter);
//字符串转时间
String dateTimeStr = "2018-07-28 14:11:15";
DateTimeFormatter df = ("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = (dateTimeStr, df);
4. 获取当前的秒级和毫秒级时间戳
//获取秒数
Long second = ().toEpochSecond(("+8"));
//获取毫秒数
Long milliSecond = ().toInstant(("+8")).toEpochMilli();
总结,可以使用Instant代替 Date,LocalDateTime代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat。
Reference:
/u014044812/article/details/79231738
/p/b212afa16f1f