1 String 类型的"yyyy-MM-dd'T'HH:mm:ss"如何把T格式化。先转Date类型,在格式化date类型 。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse("2020-08-06T14:04:08");
String dateTime = sdf2.format(date);
log.info(dateTime);
} catch (ParseException e) {
e.printStackTrace();
}
2 localdatetime的with方法,重新定义时间
// localdatetime的with方法,重新定义时间
LocalDateTime now = LocalDateTime.now();
log.info(now.toString());
LocalDateTime test = now.withHour(8).withMinute(9).withMonth(7);
log.info(test.toString());
打印结果 :2020-08-27T09:59:24.505
2020-07-27T08:09:24.505
3 insant
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// localdatetime获取当天北京时间
LocalDateTime localDateTime = LocalDateTime.now();
log.info("localdatetime获取当天北京时间:" + localDateTime.toString());
// Instant获取当前时间为utc时间,比北京时间晚8个小时
Instant instant = Instant.now();
log.info("Instant 获取当前时间为utc时间,比北京时间晚8个小时:" + instant.toString());
// Instant转换成北京时间
Instant beijingInstant = instant.plusMillis(TimeUnit.HOURS.toMillis(8));
log.info("Instant 转换成北京时间:" + beijingInstant.toString());
// Instant 换换乘10位秒数和13位毫秒数
Long second = instant.getEpochSecond();
Long milli = instant.toEpochMilli();
Long beijingmilli = beijingInstant.toEpochMilli();
log.info("Instant 转换成10位秒数:" + second.toString());
log.info("Instant 转换成和13位毫秒数:" + milli.toString());
log.info("北京时间的instant:" + beijingmilli.toString());
// localdatetime转换为long类型的毫秒(通过instant转成UTC时间的毫秒,比北京时间晚8小时)
Long epochmilli = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
log.info("localdatetime转换为long类型的毫秒:" + epochmilli.toString());
// localdatetime转换成instant
Instant instant1 = localDateTime.toInstant(ZoneOffset.of("+8"));
Instant instant2 = localDateTime.toInstant(ZoneOffset.ofHours(-8));
log.info("localdatetime转换成instant 转换方式一:" + instant1);
log.info("localdatetime转换成instant 转换方式二:" + instant2);
// instant转换成Localdatetime 转换成系统默认时区
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault());
log.info("instant转换成Localdatetime:" + localDateTime1);
// long转换为时间 long类型默认是utc的时间,转换成date自动+8
Date date = new Date(beijingmilli);
String dateString = sdf.format(date);
log.info("long转换为时间:" + dateString);
//influxdb取出的"yyyy-MM-dd'T'HH:mm:ss"转换为localdatetime
String influxdbDate = "2020-08-27T08:00:00+08:00";
DateTimeFormatter rfc3339 = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
.appendZoneOrOffsetId().toFormatter();
LocalDateTime dateTime = LocalDateTime.parse(influxdbDate, rfc3339);
log.info("influxdb取出的\"yyyy-MM-dd'T'HH:mm:ss\"转换为localdatetime" + dateTime);
打印结果:
localdatetime获取当天北京时间:2020-08-27T16:23:29.289
Instant 获取当前时间为utc时间,比北京时间晚8个小时:2020-08-27T08:23:29.289Z
Instant 转换成北京时间:2020-08-27T16:23:29.289Z
Instant 转换成10位秒数:1598516609
Instant 转换成和13位毫秒数:1598516609289
北京时间的instant:1598545409289
localdatetime转换为long类型的毫秒:1598516609289
localdatetime转换成instant 转换方式一:2020-08-27T08:23:29.289Z
localdatetime转换成instant 转换方式二:2020-08-28T00:23:29.289Z
instant转换成Localdatetime:2020-08-27T16:23:29.289
long转换为时间:2020-08-28 00:23:29.289
influxdb取出的"yyyy-MM-dd'T'HH:mm:ss"转换为localdatetime2020-08-27T08:00