一、时间戳与LocalDateTime相互转换
//时间戳转LocalDateTime
LocalDateTime localDateTime = Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
//LocalDateTime获取秒数
Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));
//LocalDateTime获取毫秒数
Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
//时间戳转LocalDate
LocalDate localDate = Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneOffset.ofHours(8)).toLocalDate();
//LocalDate获取秒数
Long second = LocalDate.now().atStartOfDay().toEpochSecond(ZoneOffset.ofHours(8));
//LocalDate获取毫秒数
Long milliSecond = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
//** 注:of("+8") 和 ofHours(8)意义相同
二、LocalDateTime,LocalDate,LocalTime与Date的相互转换小实例
①LocalDateTime与Date的相互转换
/* *
* LocalDateTime转Date
* 设置时区,把获取到的时间换算为当前设置的时区的时间戳
* atStartOfDay(xxx)方法是根据时区设置一天的起始时间点
* 获取系统默认是时区,如:Asia/Shanghai
* 可以才分为:
* LocalDateTime localDateTime=()
* ZoneId zoneId=();
* Instant instant=(zoneId).toInstant();
* Date date=(instant);
* */
Date date = Date.from(LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)));
或
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
/* *
* Date转LocalDateTime
* 为了好理解可将其分为如下步骤:
* Date date= new Date();
* ZoneId zoneId=();
* Instant instant=();
* LocalDateTime localDateTime =(zoneId).toLocalDateTime();
* */
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
或
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
//打印输出为String类型
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
②LocalDate与Date的相互转换
/* *
* LocalDate转Date
* 设置时区,把获取到的时间换算为当前设置的时区的时间戳
* atStartOfDay(xxx)方法是根据时区设置一天的起始时间点
* 获取系统默认是时区,如:Asia/Shanghai
* 可以才分为:
* ZoneId zoneId=();
* ZoneDateTime zoneDateTime=().atStartOfDay(zoneId);
* Instant instant=();
* Date date=(instant);
* */
Date date= Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
或
Date date= Date.from(LocalDate.now().atStartOfDay().toInstant(ZoneOffset.ofHours(8)));
//打印输出为String类型
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
/**
* Date转LocalDate
* 为了好理解可将其分为如下步骤:
* Date date=new Date();
* ZoneId zoneId=();
* Instant instant=();
* LocalDate localDate=(zoneId).toLocalDate();
* */
LocalDate localDate = new Date().toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDate();
或
LocalDate localDate = new Date().toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDate();
//打印,为当前时间,格式为:yyyy-MM-dd HH:mm:ss
System.out.println(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
补充:Instant内容请看补充
三、LocalDate 时间差
String startTime="2020-07-22";
String endTime="2020-07-30";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse(startTime, dateTimeFormatter);
LocalDate endDate = LocalDate.parse(endTime, dateTimeFormatter);
//时间间隔天数 10天
long days =startDate.until(endDate, ChronoUnit.DAYS)+1;
四、LocalDateTime获取月份里面的第一天和最后一天
//通过一个月里面的随便一天获取月份的第一天和最后一天的日期
LocalDateTime date = LocalDateTime.now();
LocalDateTime firstDayOfMonth=date.with(TemporalAdjusters.firstDayOfMonth());
LocalDateTime lastDayOfMonth=date.with(TemporalAdjusters.lastDayOfMonth());
实际运用例子
public class DateChange{
private static final int DATE_TYPE_LENGTH_TEN=10;
private static final int DATE_TYPE_LENGTH_NINETEENTH=19;
private static final String DATE_TYPE_FORMAT_ONE="yyyy-MM-dd HH:mm:ss";
private static final String DATE_TYPE_FORMAT_TWO="yyyy-MM-dd";
private static final String DATE_TYPE_FORMAT_THREE="HH:mm:ss";
/**
* 将字符串按指定的format格式化成日期时间
*
* @param dateTime 指定的日期字符串
* @param format 格式样式(格式:yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss)
* @return 日期时间
*/
public static Date parseDateTime1(String dateTime, String format) {
LocalDateTime localDateTime;
LocalDate localDate;
LocalTime localTime;
Date date=null;
ZoneId zoneId=ZoneId.systemDefault();
Instant instant;
ZonedDateTime zonedDateTime;
switch (format){
case DATE_TYPE_FORMAT_ONE:
String formatDateTime;
if (dateTime.length() == DATE_TYPE_LENGTH_NINETEENTH) {
formatDateTime = dateTime;
}else {
formatDateTime=dateTime + " 00:00:00";
}
localDateTime=LocalDateTime.parse(formatDateTime,DateTimeFormatter.ofPattern(DATE_TYPE_FORMAT_ONE));
instant=localDateTime.atZone(zoneId).toInstant();
date=Date.from(instant);
break;
case DATE_TYPE_FORMAT_TWO:
String formatDate;
if (dateTime.length()==DATE_TYPE_LENGTH_NINETEENTH){
formatDate=dateTime.substring(0,10);
}else {
formatDate=dateTime;
}
localDate=LocalDate.parse(formatDate,DateTimeFormatter.ofPattern(DATE_TYPE_FORMAT_TWO));
zonedDateTime=localDate.atStartOfDay(zoneId);
//instant=(zoneId).toInstant();
date=Date.from(zonedDateTime.toInstant());
break;
case DATE_TYPE_FORMAT_THREE:
localTime=LocalTime.parse(dateTime,DateTimeFormatter.ofPattern(DATE_TYPE_FORMAT_THREE));
instant=localTime.atDate(LocalDate.now()).atZone(zoneId).toInstant();
//zonedDateTime=(()).atZone(zoneId);
//date=(());
date=Date.from(instant);
default:
new DateTimeParseException("不支持格式进行时间类型转换",format,format.length());
}
return date;
}
}