/*=== 毫秒值与时间互相转换 ===*/
/*
* 毫秒值>>时间
* 思路:先转换成Instant,再加上时区(ZoneOffset也可以)转换成LocalDateTime
* 思路:使用LocalDateTime.ofEpochSecond 传入秒,和纳秒值
*/
long milli = 1555666999123L;//首先来一个long毫秒值,也可使用System.currentTimeMillis()
LocalDateTime time1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault());
LocalDateTime time2 = LocalDateTime.ofEpochSecond(milli / 1000, (int)(milli % 1000 * 1000_000), ZoneOffset.ofHours(8));
System.out.println("毫秒值转换时间方式一:" + time1);//2019-04-19T17:43:19.123
System.out.println("毫秒值转换时间方式二:" + time2);//2019-04-19T17:43:19.123
System.out.println("两种方式结果是否一致:" + time1.equals(time2));//true
/*
* 时间>>毫秒值
* 思路:先根据当前时间的时区转换成Instant,再使用Instant对象的toEpochMilli方法
* 思路:使用toEpochSecond(ZoneOffset)和getNano()分别获得秒(整数部分,不足一秒的舍弃)和纳秒,再统一单位到毫秒进行相加
*/
LocalDateTime time = LocalDateTime.of(2019, 4, 19, 17, 43, 19, 123 * 1000_000);//首先有一个时间对象,2019-04-19T17:43:19.123
long milli1 = time.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
long milli2 = time.toEpochSecond(ZoneOffset.ofHours(8)) * 1000 + time.getNano() / 1000_000;
System.out.println("时间转换毫秒值方式一:" + milli1);
System.out.println("时间转换毫秒值方式二:" + milli2);
/*=== 文本与时间互相转换 ===*/
//文本与时间转换需要一个模板和一个 DateTimeFormatter
String pattern = "自定义文本''yyyy-MM-dd HH:mm:ss.SSS''";
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(pattern);
//java8版本在pattern带毫秒的解析中异常问题可使用DateTimeFormatterBuilder的appendPattern和appendValue方式进行构建(未验证)
/*DateTimeFormatter timeFormatter = new DateTimeFormatterBuilder()
.appendPattern("自定义文本''yyyy-MM-dd HH:mm:ss.")
.appendValue(ChronoField.MILLI_OF_SECOND)
.appendPattern("''").toFormatter();*/
/*
* 文本>>时间
* 思路:直接使用LocalDateTime.parse方法,传入文本和一个DateTimeFormatter实例
* 思路:使用DateTimeFormatter对象的parse方法解析出一个TemporalAccessor对象,再最为LocalDateTime.from的参数
*/
String text = "自定义文本'2019-04-19 17:43:19.123'";//假设有这样一个文本,需要转换为时间
LocalDateTime localDateTime1 = LocalDateTime.parse(text, timeFormatter);
LocalDateTime localDateTime2 = LocalDateTime.from(timeFormatter.parse(text));
System.out.println(localDateTime1);//2019-04-19T17:43:19.123
System.out.println(localDateTime2);//2019-04-19T17:43:19.123
System.out.println(localDateTime1.equals(localDateTime2));//true
/*
* 时间>>文本
* 思路:DateTimeFormatter和LocalDateTime都可以作为主调,另一个则最为参数
*/
LocalDateTime localDateTime = LocalDateTime.of(2019, 4, 19, 17, 43, 19, 123 * 1000_000);//假设有这样一个时间对象,2019-04-19T17:43:19.123 需要转换为文本
System.out.println("时间转换为自定义文本:" + timeFormatter.format(localDateTime));
System.out.println("时间转换为自定义文本:" + localDateTime.format(timeFormatter));
/*=== 文本转换为毫秒值 ===*/
/*
* 文本=>时间=>毫秒值
* 参考以上
*/
LocalDateTime与DateTimeFormatter,毫秒值,时间和文本转换
最新推荐文章于 2024-08-29 02:38:35 发布