LocalDateTime,LocalDate,LocalTime和Date的相互转换

一、时间戳与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=LocalDateTime.now()
	 * ZoneId zoneId=ZoneId.systemDefault();
	 * Instant instant=localDateTime.atZone(zoneId).toInstant();
	 * Date date=Date.from(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=ZoneId.systemDefault();
	 * Instant instant=date.toInstant(); 
	 * LocalDateTime localDateTime =instant.atZone(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=ZoneId.systemDefault();
	 * ZoneDateTime zoneDateTime=LocalDate.now().atStartOfDay(zoneId);
	 * Instant instant=zoneDateTime.toInstant();
	 * Date date=Date.from(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=ZoneId.systemDefault();
	 * Instant instant=date.toInstant(); 
	 * LocalDate localDate=instant.atZone(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=localDate.atStartOfDay(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=localTime.atDate(LocalDate.now()).atZone(zoneId);
                //date=Date.from(zonedDateTime.toInstant());
                date=Date.from(instant);
            default:
                new DateTimeParseException("不支持格式进行时间类型转换",format,format.length());
        }
        return date;
    }
}  

推 荐 :CTO 说了,还在用 Java Calendar 类处理时间的直接开除(码匠笔记)

你可能感兴趣的:(Java基础,java)