文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java String、Date、Calendar、LocalDate和LocalDateTime互转

2023-09-29 21:48

关注

目录

一、String和Date互转

1.1 String时间转为Date

1.2 Date转为String

二、String和Calendar互转

2.1 String时间转为Calendar

2.2 Calendar转为String

三、String和LocalDate(LocalDateTime)互转

3.1 String时间转为LocalDate(LocalDateTime)

3.2 LocalDate(LocalDateTime)转为String

四、Date和Calendar互转

4.1 Date转为Calendar

4.2 Calendar转为Date

五、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

七、LocalDate和LocalDateTime互转

7.1 LocalDate转LocalDateTime

7.2 LocalDateTime转LocalDate


一、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。

来源地址:https://blog.csdn.net/imwucx/article/details/132037774

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯