欢迎访问宙启技术站
智能推送

Java函数实现日期时间转换格式

发布时间:2023-06-25 11:22:49

在Java中,日期时间转换是一项常见的任务。有时我们需要将日期时间格式转换为我们想要的格式,或者将它们从一个格式转换为另一个格式。在这篇文章中,我们将学习如何在Java中实现日期时间转换,以及如何使用不同的库来帮助实现这些转换。

Java中的日期时间类

在Java中,日期和时间可以使用java.util包中的类进行处理。 其中最常用的类是Date和Calendar类。但是,自从Java 8起,Java引入了新的日期时间API,其中包括LocalDate,LocalTime,LocalDateTime和ZonedDateTime等类。

这些类可以用于处理日期,时间和日期和时间的组合。它们具有一些很好的特性,例如线程安全性,可变性等。

日期时间格式化

当我们需要将日期时间转换成不同的格式时,Java中就有一种称为SimpleDateFormat的类。使用SimpleDateFormat可以将日期时间对象格式化为String类型。

SimpleDateFormat类使用一些字符来表示日期和时间的不同部分。例如,字符“y”代表年份,字符“M”代表月份,字符“d”代表日期,字符“h”代表小时,字符“m”代表分钟,字符“s”代表秒钟等等。

以下是一些常用的日期时间格式:

| 字符 | 说明 | 示例 |

|--------|--------|--------|

| yyyy | 四位数年份 | 2022 |

| yy | 两位数年份 | 22 |

| MMMM | 完整月份名称 | January |

| MMM | 简写月份名称 | Jan |

| MM | 两位数月份 | 01 |

| M | 一位数月份 | 1 |

| dd | 两位数日期 | 01 |

| d | 一位数日期 | 1 |

| EEEE | 完整星期名称 | Monday |

| EEE | 简写星期名称 | Mon |

| HH | 24小时制小时数 | 00 |

| H | 24小时制小时数(无前导零) | 0 |

| hh | 12小时制小时数 | 12 |

| h | 12小时制小时数(无前导零) | 12 |

| mm | 两位数分钟 | 01 |

| m | 一位数分钟 | 1 |

| ss | 两位数秒数 | 01 |

| s | 一位数秒数 | 1 |

| a | 上午/下午 | AM |

下面是一些将日期时间格式化为字符串的示例:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = new Date();
String strDate = dateFormat.format(date);
System.out.println("日期时间格式化为:" + strDate);

//输出:日期时间格式化为:2022年01月01日 11:12:50

SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
dateFormat2.setTimeZone(TimeZone.getTimeZone("GMT"));
strDate = dateFormat2.format(date);
System.out.println("日期时间格式化为:" + strDate);

//输出:日期时间格式化为:Sat, 01 Jan 2022 03:12:50 GMT

在这里,我们创建了一个SimpleDateFormat对象,用于将日期时间格式化为一个字符串。 在 个示例中,我们使用标准的年月日和小时分钟秒格式,而在第二个示例中,我们使用了其他字符来生成标准的格林威治时间字符串。

日期时间解析

我们还可以将日期时间字符串解析为Date对象或者Calendar对象。可以使用SimpleDateFormat类的parse()方法解析日期时间字符串。

下面是一些将字符串解析为Date对象或Calendar对象的示例:

String strDate = "2022-01-01 11:22:33";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse(strDate);
System.out.println("字符串解析为:" + date);

//输出:字符串解析为:Sat Jan 01 11:22:33 CST 2022

String strDate2 = "20220101";
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat2.parse(strDate2));
System.out.println("字符串解析为:" + calendar.getTime());

//输出:字符串解析为:Sat Jan 01 00:00:00 CST 2022

在 个示例中,我们使用SimpleDateFormat的parse()方法将字符串“2022-01-01 11:22:33”转换为Date对象。 在第二个示例中,我们使用SimpleDateFormat的parse()方法将字符串“20220101”转换为Calendar对象。请注意,在这个示例中,我们需要将Date对象设置为Calendar对象的时间。

Java中的其他日期时间类库

除了Java内置的日期时间类库外,我们还可以使用第三方日期时间类库来处理日期时间。下面是一些常见的日期时间类库:

### 1. Joda Time

Joda Time是一个流行的Java日期时间类库,它提供了一组简单而强大的API,可以用于处理日期,时间,日期时间和时间区域。Joda Time基于JSR-310规范,是Java 8日期时间API的前身。Joda Time提供了一些类,例如DateTime,LocalDate等,提供了一些有用的方法,例如plusDays,getYear等。

下面是一些使用Joda Time类库的示例:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy年MM月dd日 HH:mm:ss");
DateTime dateTime = formatter.parseDateTime("2022年01月01日 11:22:33");
System.out.println("日期时间:" + dateTime);

//输出:日期时间:2022-01-01T11:22:33.000+08:00

LocalDate date = new LocalDate(2022, 1, 1);
LocalTime time = new LocalTime(11, 22, 33);
DateTime dt = new DateTime(date.getYear(), date.getMonthOfYear(), date.getDayOfMonth(),
                            time.getHourOfDay(), time.getMinuteOfHour(), time.getSecondOfMinute());
System.out.println("日期时间:" + dt);

//输出:日期时间:2022-01-01T11:22:33.000+08:00

在这里,我们使用了DateTimeFormatter类将日期时间字符串格式化为DateTime对象。 也可以直接创建LocalDate和LocalTime对象,然后使用DateTime类将它们组合在一起。

### 2. Apache Commons Lang

Apache Commons Lang是一个Java工具包,提供了许多有用的类和方法,可以方便地处理字符串,日期和数字。在Apache Commons Lang 3版本中,提供了一些有用的日期和时间类。例如,DateUtils类提供了很多有用的方法,例如将Date对象设置为指定日期的起始时间,判断两个日期时间对象是否相等等。

下面是一些Apache Commons Lang类库的示例:

Date date1 = new Date();
String strDate = DateFormatUtils.format(date1, "yyyy年MM月dd日 HH:mm:ss");
System.out.println("日期时间格式化为:" + strDate);

//输出:日期时间格式化为:2022年01月02日 21:21:25

Date date2 = DateUtils.addDays(date1, 1);
System.out.println("日期:" + DateFormatUtils.format(date2, "yyyy年MM月dd日"));

//输出:日期:2022年01月03日

在这里,我们使用了DateFormatUtils类将Date对象格式化为我们想要的日期时间格式。 还使用了DateUtils类的addDays()方法将时间对象增加一天。

总结

在Java中,日期时间处理是一个非常常见的任务,简单的格式化和解析可能是我们要做的一件事。Java提供了基本的日期时间类,例如Date和Calendar类。但是,在Java 8中,我们看到了新的日期时间API,这些API提供了一些新的日期时间类,例如LocalDate,LocalTime和ZonedDateTime等。 还可以使用第三方日期时间类库,例如Joda Time和Apache Commons Lang,这些类库提供了一些非常有用的方法和类。使用这些方法和类可以更轻松地处理和转换日期