LocalDateTime与DateTimeFormatter,毫秒值,时间和文本转换

时间:2025-04-02 07:38:11
/*=== 毫秒值与时间互相转换 ===*/ /* * 毫秒值>>时间 * 思路:先转换成Instant,再加上时区(ZoneOffset也可以)转换成LocalDateTime * 思路:使用 传入秒,和纳秒值 */ long milli = 1555666999123L;//首先来一个long毫秒值,也可使用() 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:''"; 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();*/ /* * 文本>>时间 * 思路:直接使用方法,传入文本和一个DateTimeFormatter实例 * 思路:使用DateTimeFormatter对象的parse方法解析出一个TemporalAccessor对象,再最为的参数 */ 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)); /*=== 文本转换为毫秒值 ===*/ /* * 文本=>时间=>毫秒值 * 参考以上 */