Java String、Date、Calendar、LocalDate和LocalDateTime互转
目录
三、String和LocalDate(LocalDateTime)互转
3.1 String时间转为LocalDate(LocalDateTime)
3.2 LocalDate(LocalDateTime)转为String
五、Date和LocalDate(LocalDateTime)互转
5.1 Date转为LocalDate(LocalDateTime)
5.2 LocalDate(LocalDateTime)转为Date
六、Calendar和LocalDat(LocalDateTime)互转
6.1 Calendar转为LocalDate(LocalDateTime)
6.2 LocalDat(LocalDateTime)转为Calendar
一、String和Date互转
1.1 String时间转为Date
private Date stringToDate(String dateStr, String pattern) { try { return new SimpleDateFormat(pattern).parse(dateStr); } catch (Throwable ignore) { // TODO 时间转换异常日期 } return null;}
调方法 stringToDate(Sring, pattern):
System.out.println(stringToDate("2023-11", "yyyy-MM"));System.out.println(stringToDate("2023-11-11", "yyyy-MM-dd"));System.out.println(stringToDate("2023-11-11 11", "yyyy-MM-dd hh"));System.out.println(stringToDate("2023-11-11 11:11", "yyyy-MM-dd hh:mm"));System.out.println(stringToDate("2023-11-11 11:11:11", "yyyy-MM-dd hh:mm:ss"));
注:第一个参数的格式必须与第二个参数的模式一致才能正常转换
运行结果:
Wed Nov 01 00:00:00 CST 2023Sat Nov 11 00:00:00 CST 2023Sat Nov 11 11:00:00 CST 2023Sat Nov 11 11:11:00 CST 2023Sat Nov 11 11:11:11 CST 2023
1.2 Date转为String
private String dateToString(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date);}
调方法dateToString(Date, pattern),可根据第二个参数模式来获取对应模式的时间对应字符串格式:
System.out.println(dateToString(new Date(), "yyyy"));System.out.println(dateToString(new Date(), "yyyy-MM"));System.out.println(dateToString(new Date(), "yyyy-MM-dd"));System.out.println(dateToString(new Date(), "yyyy-MM-dd hh"));System.out.println(dateToString(new Date(), "yyyy-MM-dd hh:mm"));System.out.println(dateToString(new Date(), "yyyy-MM-dd hh:mm:ss"));
运行结果:
20232023-082023-08-012023-08-01 112023-08-01 11:402023-08-01 11:40:26
二、String和Calendar互转
2.1 String时间转为Calendar
private Calendar stringToCalendar(String dateStr, String pattern) { try { SimpleDateFormat sdf= new SimpleDateFormat(pattern); Date date = sdf.parse(dateStr); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } catch (Throwable ignore) { // TODO 时间字符串转Calendar异常 } return null;}
调用方法stringToCalendar(String, pattern):
Calendar calendar0 = stringToCalendar("2023-08-05", "yyyy");Calendar calendar1 = stringToCalendar("2023-08-05", "yyyy-MM");Calendar calendar2 = stringToCalendar("2023-08-05 11:11:11", "yyyy-MM-dd hh:mm:ss");System.out.println(calendar0.getTime());System.out.println(calendar1.getTime());System.out.println(calendar2.getTime());
注:第一个参数的格式与第二个参数的模式不一定要求强一致,但若String只有年月日,模式不能有时分秒
运行结果:
Sun Jan 01 00:00:00 CST 2023Tue Aug 01 00:00:00 CST 2023Sat Aug 05 11:11:11 CST 2023
说明:根据日期模式格式化时间对象时,若模式只有年月则日为1号,若模式没有年份则月日为01月01日,模式没有时/分/秒 则为0
2.2 Calendar转为String
private String calendarToString(Calendar calendar, final String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(calendar.getTime());}
调用方法calendarToString(Calendar, pattern),第二个参数为输出的格式模式:
System.out.println(calendarToString(Calendar.getInstance(), "yyyy-MM"));System.out.println(calendarToString(Calendar.getInstance(), "yyyy-MM-dd"));System.out.println(calendarToString(Calendar.getInstance(), "yyyy-MM-dd hh"));System.out.println(calendarToString(Calendar.getInstance(), "yyyy-MM-dd hh:mm"));System.out.println(calendarToString(Calendar.getInstance(), "yyyy-MM-dd hh:mm:ss"));
运行结果:
2023-082023-08-012023-08-01 112023-08-01 11:592023-08-01 11:59:13
三、String和LocalDate(LocalDateTime)互转
3.1 String时间转为LocalDate(LocalDateTime)
private LocalDate stringToLocalDate(String dateStr, String pattern) { DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern); return LocalDate.parse(dateStr, df);}private LocalDateTime stringToLocalDateTime(String dateStr, String pattern) { DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern); return LocalDateTime.parse(dateStr, df);}
调方法 stringToLocalDate(Sring, pattern),第二个参数模式必须有年月日,第一个参数的格式必须与第二个参数的模式一致才能正常转换
System.out.println(stringToLocalDate("2023-08-01", "yyyy-MM-dd"));System.out.println(stringToLocalDate("2023-08-02 11", "yyyy-MM-dd hh"));System.out.println(stringToLocalDate("2023-08-02 11:12", "yyyy-MM-dd hh:mm"));System.out.println(stringToLocalDate("2023-08-02 11:12:13", "yyyy-MM-dd hh:mm:ss"));System.out.println(stringToLocalDateTime("2023-08-02 11:12:13", "yyyy-MM-dd hh:mm:ss"));
运行结果:
2023-08-012023-08-022023-08-022023-08-02java.time.format.DateTimeParseException: Text '2023-08-02 11:12:13' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MinuteOfHour=12, SecondOfMinute=13, MilliOfSecond=0, MicroOfSecond=0, HourOfAmPm=11, NanoOfSecond=0},ISO resolved to 2023-08-02 of type java.time.format.Parsed
注:报错的原因是stringToLocalDateTime方法第二个参数模式的小时hh 采用12小时,反解析时不知道上午还是下午,改成24小时制“yyyy-MM-dd HH:mm:ss”即可。
3.2 LocalDate(LocalDateTime)转为String
private String localDateToString(LocalDate localDate, String pattern) { return localDate.format(DateTimeFormatter.ofPattern(pattern));}private String localDateToString(LocalDateTime localDateTime, String pattern) { return localDateTime.format(DateTimeFormatter.ofPattern(pattern));}
只需要年月日用LocalDate,若需要时分秒用LocalDateTime
调方法localDateToString:
System.out.println(localDateToString(LocalDate.now(), "yyyy"));System.out.println(localDateToString(LocalDate.now(), "yyyy-MM"));System.out.println(localDateToString(LocalDate.now(), "yyyy-MM-dd"));System.out.println(localDateToString(LocalDateTime.now(), "yyyy-MM-dd HH"));System.out.println(localDateToString(LocalDateTime.now(), "yyyy-MM-dd HH:mm"));System.out.println(localDateToString(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"));
运行结果:
20232023-082023-08-012023-08-01 122023-08-01 12:032023-08-01 12:03:44
四、Date和Calendar互转
4.1 Date转为Calendar
private Calendar dateToCalendar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date ); return cal;}
调方法dateToCalendar(Date):
Calendar calendar = dateToCalendar(new Date());System.out.println(calendar.getTime());
运行结果:
Tue Aug 01 12:08:41 CST 2023
4.2 Calendar转为Date
private Date calendarToDate(Calendar calendar) { return calendar.getTime();}
调方法calendarToDate(Calendar):
System.out.println(calendarToDate(Calendar.getInstance()));
运行结果:
Tue Aug 01 12:10:21 CST 2023
五、Date和LocalDate(LocalDateTime)互转
5.1 Date转为LocalDate(LocalDateTime)
private LocalDate dateToLocalDate(Date date) { // 将java.util.Date转换为ZonedDateTime。 Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = instant.atZone(zoneId); // 使用它的toLocalDate()方法从ZonedDateTime获取LocalDate return zonedDateTime.toLocalDate();}private LocalDateTime dateToLocalDateTime(Date date) { // 将Date对象转换成为Instant对象 Instant instant = date.toInstant(); // 将瞬时对象转换成为LocalDateTime对象 return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());}
调dateToLocalDate(Date),转LocalDateTime调dateToLocalDateTime(Date):
System.out.println(dateToLocalDate(new Date()));System.out.println(dateToLocalDateTime(new Date()));
运行结果:
2023-08-012023-08-01T12:22:39.742
5.2 LocalDate(LocalDateTime)转为Date
private Date localDateToDate(LocalDate localDate) { ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = localDate.atStartOfDay(zoneId); // 将时区对象转换成为瞬时对象 Instant instant2 = zonedDateTime.toInstant(); // 通过Date提供的静态方法将瞬时对象转换为Date对象 return Date.from(instant2);}private Date localDateTimeToDate(LocalDateTime localDateTime) { // 将LocalDateTime对象转换成为时区对象 ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault()); // 将时区对象转换成为瞬时对象 Instant instant2 = zonedDateTime.toInstant(); // 通过Date提供的静态方法将瞬时对象转换为Date对象 return Date.from(instant2);}
LocalDateTime调localDateTimeToDate(LocalDateTime ),LocalDate调localDateToDate(LocalDate ):
System.out.println(localDateToDate(LocalDate.now()));System.out.println(localDateTimeToDate(LocalDateTime.now()));
运行结果:
Tue Aug 01 00:00:00 CST 2023Tue Aug 01 12:25:06 CST 2023
六、Calendar和LocalDat(LocalDateTime)互转
6.1 Calendar转为LocalDate(LocalDateTime)
调4.2由Calendar转为Date,再调5.1转为LocalDate/LocalDateTime:
System.out.println(dateToLocalDate(calendarToDate(Calendar.getInstance())));System.out.println(dateToLocalDateTime(calendarToDate(Calendar.getInstance())));
运行结果:
2023-08-012023-08-01T12:33:01.151
6.2 LocalDat(LocalDateTime)转为Calendar
调5.2由LocalDate转为Date,再调4.1转为Calendar:
Calendar calendar1 = dateToCalendar(localDateToDate(LocalDate.now()));Calendar calendar2 = dateToCalendar(localDateTimeToDate(LocalDateTime.now()));System.out.println(calendar1.getTime());System.out.println(calendar2.getTime());
运行结果:
Tue Aug 01 00:00:00 CST 2023Tue Aug 01 12:35:47 CST 2023
七、LocalDate和LocalDateTime互转
7.1 LocalDate转LocalDateTime
private LocalDateTime localDateToLocalDateTime(LocalDate localDate) { return dateToLocalDateTime(localDateToDate(localDate));}
7.2 LocalDateTime转LocalDate
private LocalDate localDateTimeToLocalDate(LocalDateTime localDateTime) { return localDateTime.toLocalDate();}
调7.1和7.2:
System.out.println(localDateToLocalDateTime(LocalDate.now()));System.out.println(localDateTimeToLocalDate(LocalDateTime.now()));
运行结果:
2023-08-01T00:002023-08-01
注:String为java.lang.String,Date为java.util.Date,Calendar为java.util.Calendar,LocalDate为java.time.LocalDate,LocalDateTime为java.time.LocalDateTime。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341